Avatar billede anders1000 Nybegynder
08. august 2010 - 23:37 Der er 4 kommentarer og
1 løsning

Makro: Søg og erstat i dokument - både i tekst, sidehoved og sidefod

Hej med Jer,

Jeg har et problem med en makro, som skal søg og erstat i et dokument (i tekst, sidefod og sidehoved).

Den, som jeg har oprettet søger kun i teksten.

Dim A
    A = Txtfirma.Value

If A <> "" Then
           
        With Selection.Find
        .Text = "[Selskabets navn]"
        .Replacement.Text = A

    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ActiveWindow.ActivePane.VerticalPercentScrolled = 0

End If


Jeg har haft lavet en makro, som søger i sidehoved, men så søger den kun i sidehoved - og kun på første side.

Det drejer sig om ca. 6-7 sider, hvor den skal lave søg og erstat på 10-15 ord (tekst, sidehoved, sidefod).

Er det muligt at lave en makro som søger i ALT?

På forhånd tak.

Hilsen,
Anders
Avatar billede Lene Fredborg Ekspert
09. august 2010 - 00:38 #1
Ja, det er muligt. Et dokument består af en masse "StoryRanges", og makroen skal søge igennem dem alle. Du finder en sådan makroløsning her (se Step 3 hvis du skal have den vandtætte løsning, men Step 2 kan måske gøre det i din situation):
http://word.mvps.org/faqs/customization/ReplaceAnywhere.htm
Avatar billede anders1000 Nybegynder
09. august 2010 - 13:00 #2
Hej,

Jeg har nu fået den til at finde alt i dokumentet ved hjælp at linket ovenfor. Jeg kan dog kun få den til det nå
r jeg har én (1) txt.value. Hvordan gør jeg så jeg kan "søg og erstat" når jeg har flere txt.value?

På forhånd tak.



Private Sub cmdOK_Click()

FrmformularDK.Hide

    ChangeFileOpenDirectory Makroer.StiSkabKontrakter
        Documents.Add Template:="formularDK.dotx"

Dim A
    A = Txtfirma.Value
   
 
Dim rngStory As Word.Range

  Dim lngJunk As Long


  lngJunk = ActiveDocument.Sections(1).Headers(1).Range.StoryType

  For Each rngStory In ActiveDocument.StoryRanges

    Do

      With rngStory.Find

 
        .Text = "[Selskabets navn]"
        .Replacement.Text = A
                 
        .Wrap = wdFindContinue

        .Execute Replace:=wdReplaceAll

      End With

 
      Set rngStory = rngStory.NextStoryRange

    Loop Until rngStory Is Nothing

  Next

End Sub
Avatar billede Lene Fredborg Ekspert
09. august 2010 - 13:22 #3
Så kan du bygge en løkke ind, som får erstatningen til at køre flere gange, f.eks. sådan (se kommentarerne i koden):

Private Sub cmdOK_Click()

    FrmformularDK.Hide

    ChangeFileOpenDirectory Makroer.StiSkabKontrakter
    Documents.Add Template:="formularDK.dotx"

    Dim A
   
    A = Txtfirma.value

    Dim rngStory As Word.Range
    Dim lngJunk As Long
    Dim oArray As Variant 'til definition af tekster, der skal findes
    Dim n As Long
   
    'Udskift teksterne i arrayet med de ønskede søgestrenge - føj flere til eller fjern efter behov
    oArray = Array("tekst1", "tekst2", "tekst3")

   
    'Gentag koden nedenfor for alle værdier i oArray
    For n = LBound(oArray) To UBound(oArray)
        lngJunk = ActiveDocument.Sections(1).Headers(1).Range.StoryType
   
        For Each rngStory In ActiveDocument.StoryRanges
   
            Do
                With rngStory.Find
                    .Text = oArray(n) 'teksten, der skal findes
                    .Replacement.Text = A
                    .Wrap = wdFindContinue
                    .Execute Replace:=wdReplaceAll
                End With
   
                Set rngStory = rngStory.NextStoryRange
   
            Loop Until rngStory Is Nothing
   
        Next
    Next n

End Sub
Avatar billede anders1000 Nybegynder
10. august 2010 - 14:56 #4
Mange tak for hjælpen. Det virker perfekt - dog tager det lidt tid at køre med alle de loop.

Smider du lige et svar.

Anders
Avatar billede Lene Fredborg Ekspert
10. august 2010 - 15:38 #5
Velbekomme.
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