Avatar billede LS-Falster Juniormester
15. april 2016 - 11:04 Der er 3 kommentarer og
1 løsning

Hjælp til at kombinere to makroer i Word

Jeg har lavet en skabelon, hvor brugeren starter med at beskytte dokumentet, så de kun kan indtaste oplysninger i tekstfelter.

Testfelterne har en standardtekst, som brugerne enten kan vælge at slette eller overskrive. Hvis teksten skal slettes, bliver der kørt en makro, som fjerner beskyttelse af dokumentet, udfører makroen og derefter beskytter dokumentet igen. Makroen ser således ud:

Sub SletTomtFelt1()

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

End Sub


Jeg har fået hjælp til en anden makro, som skal skal lægges ind i et andet tekstfelt. Makroen er følgende:

Sub Adressefelter()
    Dim rngAdresse As Range
   
    With ActiveDocument
        If .Bookmarks.Exists("HeleAdressen") Then
            Set rngAdresse = .Bookmarks("HeleAdressen").Range
           
            'Find all occurrences of two spaces and two commas and delete by a single
            With rngAdresse
                Do Until InStr(1, .Text, "  ") = 0 And _
                        InStr(1, .Text, ",,") = 0
                  .Text = Replace(.Text, "    ,", ",")
                  .Text = Replace(.Text, "    ,", ",")
                  .Text = Replace(.Text, "  ,", ",")
                  .Text = Replace(.Text, "  ,", ",")
                  .Text = Replace(.Text, " ,", ",")
                  .Text = Replace(.Text, ",,", ",")
                  .Text = Replace(.Text, "  ", "")
                Loop
            End With
        End If
    End With

Hvordan får jeg kombineret de to makroer? Dokumentet er som udgangspunkt beskyttet, så der skal indskrives en "fjern beskyttelse/beskyt dokument igen" i den nederste makro.
Avatar billede claes57 Ekspert
15. april 2016 - 11:39 #1
Sub Adressefelter()
    Dim rngAdresse As Range
   
    With ActiveDocument
        If .Bookmarks.Exists("HeleAdressen") Then
        'fjern beskyttlse
        UnprotectForFormFields ActiveDocument
            Set rngAdresse = .Bookmarks("HeleAdressen").Range
           
            'Find all occurrences of two spaces and two commas and delete by a single
            With rngAdresse
                Do Until InStr(1, .Text, "  ") = 0 And _
                        InStr(1, .Text, ",,") = 0
                  .Text = Replace(.Text, "    ,", ",")
                  .Text = Replace(.Text, "    ,", ",")
                  .Text = Replace(.Text, "  ,", ",")
                  .Text = Replace(.Text, "  ,", ",")
                  .Text = Replace(.Text, " ,", ",")
                  .Text = Replace(.Text, ",,", ",")
                  .Text = Replace(.Text, "  ", "")
                Loop
            End With
        'beskyt igen
        ProtectForFormFields ActiveDocument
        End If
    End With
Avatar billede LS-Falster Juniormester
15. april 2016 - 11:50 #2
Det var lige i øjet. Sender du et svar, så du kan få dine point?
Avatar billede claes57 Ekspert
15. april 2016 - 12:02 #3
Bare luk selv, du havde jo al kode klar.
Avatar billede LS-Falster Juniormester
15. april 2016 - 12:38 #4
Lukket.
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