Avatar billede Falentin Seniormester
09. august 2020 - 15:11 Der er 1 kommentar og
1 løsning

Lille begyndelsesbogstav efter hvert punktum i vba?

Jeg ønsker at ændre til lille begyndelsesbogstav efter hvert punktum i vba.

Følgende kode virker dog ikke, da jeg får fejlen:

"Runtime error 5623: Erstatningsteksten indeholder et gruppenummer, der er uden for det tilladte område"

Men jf. https://docs.microsoft.com/en-us/office/vba/api/word.wdcharactercase
burde det være 0 ved WdLowerCase

Min kode er:

Sub CapsAfterDot()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ". ([a-å])"
        .Replacement.Text = ". \0"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute

    While Selection.Find.Found
        Selection.Range.Case = wdLowerCase
        Selection.Collapse direction:=wdCollapseEnd
        Selection.Find.Execute
    Wend
End Sub
Avatar billede Lene Fredborg Ekspert
09. august 2020 - 18:34 #1
Det er korrekt, at wdLowerCase = 0, men det har ingen relevans for Find-handlingen. Det betyder, at du kan bruge 0 (nul) i stedet for wdLowerCase.

Med linjen:
.Replacement.Text = ". \0"
er det nok din idé, at det skulle erstatte det fundne bogstav med lowercase – det er ikke muligt. I givet fald havde du heller ikke brug for koden While…Wend.

Her er en tilrettet version af din kode. Jeg har ”strømlinet" den ved at bruge With…End With. Desuden er der ændret en del i koden. Du kan sammenligne med din egen version.

Sub CapsAfterDot()
   
    With Selection
        With .Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = ". ([A-Å])"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = True
            .MatchWholeWord = False
            .MatchWildcards = True
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
   
        While .Find.Execute = True
            .Range.Case = wdLowerCase
        Wend
    End With
End Sub
Avatar billede Falentin Seniormester
09. august 2020 - 23:12 #2
Tusind tak, Lene. Det virker upåklageligt, som altid :-)
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
Kategori
Kurser inden for grundlæggende programmering

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