Avatar billede LS-Falster Juniormester
07. november 2016 - 10:52 Der er 2 kommentarer og
1 løsning

Kombinere to if-sætninger i VBA (Word)

Jeg har to forskellige koder til sletning af henholdsvis flere afsnit og til sletning af et enkelt tekstfelt. Jeg har de to koder, men kan kun få dem til at virke hver for sig, og har brug for hjælp til at få smeltet koderne sammen til en kode. Koderne er som følger:

Sub SletValg1afsnit()

    Dim f As FormField
    Dim rngParas As Range
      Set f = ActiveDocument.FormFields("Valg1")
        If f.Result = "-" Then
      'fjern beskyttelse
      UnprotectForFormFields ActiveDocument
      'definer range, som indeholder afsnit m. felt + næste 2 afsnit
      Set rngParas = f.Range.Paragraphs(1).Range
      rngParas.MoveEnd unit:=wdParagraph, Count:=2
      rngParas.Delete
      'beskyt igen
      ProtectForFormFields ActiveDocument
  End If
    Set f = Nothing
    Set rngParas = Nothing
End Sub


Sub SletTomtFelt1()

  Dim f As FormField
  Set f = ActiveDocument.FormFields("Valg1")
      If f.Result = "j" Then
        'fjern beskyttelse
        UnprotectForFormFields ActiveDocument
        f.Range.Paragraphs(1).Range.Delete
        'beskyt igen
        ProtectForFormFields ActiveDocument
      End If

End Sub
Avatar billede Lene Fredborg Ekspert
07. november 2016 - 12:00 #1
Jeg ved ikke med sikkerhed, om det er følgende, du gerne vil have. Makroen nedenfor er lavet ved at ændre mindst muligt på din eksisterende kode. Det kunne godt laves, så håndtering af beskyttelse var samlet for de to resultater, der tjekkes for, men det har ikke betydning for funktionaliteten.

Sub SletValg1afsnit_SletTomtFelt1()

    Dim f As FormField
    Dim rngParas As Range

    Set f = ActiveDocument.FormFields("Valg1")
    If f.Result = "-" Then
        'fjern beskyttelse
        UnprotectForFormFields ActiveDocument
        'definer range, som indeholder afsnit m. felt + næste 2 afsnit
        Set rngParas = f.Range.Paragraphs(1).Range
        rngParas.MoveEnd unit:=wdParagraph, count:=2
        rngParas.Delete
        'beskyt igen
        ProtectForFormFields ActiveDocument
    ElseIf f.Result = "j" Then
        'fjern beskyttelse
        UnprotectForFormFields ActiveDocument
        f.Range.Paragraphs(1).Range.Delete
        'beskyt igen
        ProtectForFormFields ActiveDocument
    End If
End If

Set f = Nothing
Set rngParas = Nothing
End Sub
Avatar billede Lene Fredborg Ekspert
07. november 2016 - 12:01 #2
(...Indryk af linjer var rettet til i min kode, men de er fjernet af ekspertens håndtering)
Avatar billede LS-Falster Juniormester
07. november 2016 - 12:44 #3
Hej Lene

Som sædvanligt havde du en løsning på mit problem. Der var lige et enkelt End if for meget i din løsning, men da jeg fik fjernet det, virkede det perfekt.
Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester