Avatar billede LS-Falster Juniormester
01. august 2016 - 08:58 Der er 4 kommentarer og
1 løsning

Optimering af makro til at slette tomme mellemrum

Hej

Jeg har 3 nærmest identiske makroer, som jeg godt kunne tænke mig at få samlet til en enkelt makro. Makroerne søger efter bogmærkerne HeleAdressen, HeleAdressen2 og HeleAdressen3.

Den første makro for HeleAdressen er følgende:
_ _ _ _ _ _ _ _ _ _ _ _ _ _
Sub Adressefelter()
    Dim rngAdresse As Range
   
    With ActiveDocument
        If .Bookmarks.Exists("HeleAdressen") Then
        'fjern beskyttelse
        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
   
Set rngAdresse = Nothing
End Sub
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

De øvrige 2 makroer er fuldstændig identiske bortset fra, at bogmærkenavnet er udskiftet med henholdsvis HeleAdressen2 og HeleAdressen3.

Hvordan kombineres disse 3 makroer til en enkelt makro?
Avatar billede supertekst Ekspert
01. august 2016 - 09:22 #1
Sub Adressefelter()
    testAdressen "HeleAdressen"
    testAdressen "HeleAdressen2"
    testAdressen "HeleAdressen3"
End Sub
Private Sub testAdressen(denneAdresse)
Dim rngAdresse As Range
    With ActiveDocument
        If .Bookmarks.Exists(denneAdresse) Then
        'fjern beskyttelse
        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
   
Set rngAdresse = Nothing
End Sub
Avatar billede supertekst Ekspert
01. august 2016 - 09:23 #2
Ups: Glemte at rette nedenstående til DenneAdresse
Set rngAdresse = .Bookmarks("HeleAdressen").Range
Avatar billede LS-Falster Juniormester
05. august 2016 - 10:12 #3
Jeg har testet makroen, men jeg får desværre fejlen "Det pågældende medlem af samlingen findes ikke"  >>> Set rngAdresse = .Bookmarks("denneAdresse").Range
Avatar billede supertekst Ekspert
05. august 2016 - 10:17 #4
denneAdresse skal ikke have " før og efter
se #2 første linje til højre
Avatar billede LS-Falster Juniormester
05. august 2016 - 11:57 #5
Det burde jeg have opdaget, men nogle gange kan man ikke se skoven for bare træer. Jeg takker 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