• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Opgelost Zoeken & Vervangen

Dit topic is als opgelost gemarkeerd

Excelvbas01

Gebruiker
Lid geworden
7 apr 2020
Berichten
162
Ik heb een Excel bestand en een word bestand. Vanaf Excel zoek ik een woord in WORD en deze wordt vervangen door een ander tekst. Tot dusver gaat het goed. Wat ik zou willen is het volgende.
Soms bevindt de tekst waar ik naar zoek, helemaal onderaan in WORD document. Ik moet dan handmatig er naar toe scrollen.
Is het mogelijk om dit te automatiseren. Ik bedoel, als de tekst is gevonden, dat er automatisch gescrold wordt naar dat woord.

Ik heb gezocht en geprobeerd maar helaas.

Ik hoop hier het antwoord te vinden.
 

Bijlagen

Zo positioneer je na je vervangactie de cursor direct na de eerste vervangen tekst:
Code:
   wordApp.Selection.Find.Execute FindText:="Zoeken en vervangen"
   wordApp.Selection.Move Unit:=12, Count:=1
 
Vermijd enige 'selection'

activedocument.content.find.execute

bevat parameters voor te vervangen tekst (en zo vaak je maar wil)
 
Ik heb te vroeg gejuicht.
Als ik deze code
Code:
  wordApp.Selection.Find.Execute FindText:="Zoeken en vervangen"
   wordApp.Selection.Move Unit:=12, Count:=1
overzet naar een ander bestand dan krijg ik foutmelding.

In het bestand wat ik eerder heb geüpload werkt het prima. Maar zodra ik de code in ander bestand overzet dan krijg ik een foutmelding.

Ik denk dat dit te maken heeft met wordApp maar weet dit niet zeker.

Hopelijk heeft iemand hier een oplossing voor.
 

Bijlagen

  • foutmelding.jpg
    foutmelding.jpg
    5 KB · Weergaven: 3
Code:
Sub SearchReplace()
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim myStoryRange As Object
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True

    Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\Templatetst.docx")
    
    For Each myStoryRange In WordDoc.StoryRanges
        With myStoryRange.Find
            .Text = "Dit is een Test"
            .Replacement.Text = "Zoeken en vervangen"
            .Execute Replace:=wdReplaceAll
        End With
         WordApp.Selection.Find.Execute FindText:="Zoeken en vervangen"
         WordApp.Selection.Move Unit:=12, Count:=1
    Next myStoryRange
End Sub
 
Helemaal niet gezien, Dank je.
Mag ik je een ding vragen?
Het document wordt elke keer geopend, is niet de bedoeling.
Als het document al open is, moet daar gezocht worden en niet opnieuw openen.
bedankt alvast.
 
Deze regel volstaat; vervangt iedere x in het document door een "y"

Code:
Sub M_snb()
   Getobject(ThisWorkbook.Path & "\Templatetst.docx").content.find.execute "x",,,,,,,,,"y",2
End Sub
 
snb bedank voor het meedenken.
Ik wil graag de code die ik hier heb gepost gebruiken. Hij werk nog niet perfect.....
Ik heb stukje code toegevoegd om te voorkomen dat het document elke keer opent als ik op de knop druk. Het probleem is nu dat de code waar het omgaat niet meer werkt.

Geeft fout bij
Code:
For Each myStoryRange In WordDoc.StoryRanges

Ik kom er niet achter waarom.

Code:
Private Sub CommandButton1_Click()
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim myStoryRange As Object
    Dim CreatWordInstance As Boolean
    
    If WordApp Is Nothing Then
         Set WordApp = CreateObject("Word.Application")
         CreatWordInstance = True
      Else
        Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\Templatetst.docx")
    
    For Each myStoryRange In WordDoc.StoryRanges
        With myStoryRange.Find
            .Text = "Dit is een Test"
            .Replacement.Text = "Zoeken en vervangen"
            .Execute Replace:=wdReplaceAll
        End With
         WordApp.Selection.Find.Execute FindText:="Zoeken en vervangen"
         'of activedocument.content.find.execute
         WordApp.Selection.Move Unit:=12, Count:=1
    Next myStoryRange
    End If
End Sub
 
Als je netjes inspringt zie je meteen waarom:
Code:
Private Sub CommandButton1_Click()
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim myStoryRange As Object
    Dim CreatWordInstance As Boolean
    
    If WordApp Is Nothing Then
        Set WordApp = CreateObject("Word.Application")
        CreatWordInstance = True
    Else
        Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\Templatetst.docx")
    
        For Each myStoryRange In WordDoc.StoryRanges
            With myStoryRange.Find
                .Text = "Dit is een Test"
                .Replacement.Text = "Zoeken en vervangen"
                .Execute Replace:=wdReplaceAll
            End With
            WordApp.Selection.Find.Execute FindText:="Zoeken en vervangen"
            'of activedocument.content.find.execute
            WordApp.Selection.Move Unit:=12, Count:=1
        Next myStoryRange
    End If
End Sub
Geef maar een seintje als je het niet ziet.
 
Ik ben dit vergeten: WordApp.Visible = True

Verder zie ik 't niet en er gebeurt nu ook helemaal niets. Ook geen foutmelding.
 
WordApp is altijd Nothing, dus wordt Word geopend en gebeurt er verder niets.
Probeer het eens zo:
Code:
Private Sub CommandButton1_Click()
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim myStoryRange As Object
    
    On Error Resume Next
    Set WordApp = GetObject(, "Word.Application")
    On Error GoTo 0
    
    If WordApp Is Nothing Then Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\Templatetst.docx")

    For Each myStoryRange In WordDoc.StoryRanges
        With myStoryRange.Find
            .Text = "Dit is een Test"
            .Replacement.Text = "Zoeken en vervangen"
            .Execute Replace:=wdReplaceAll
        End With
        WordApp.Selection.Find.Execute FindText:="Zoeken en vervangen"
        'of activedocument.content.find.execute
        WordApp.Selection.Move Unit:=12, Count:=1
    Next myStoryRange
End Sub
 
Laatst bewerkt:
Bedankt,
Ik heb t getest en merkt dat de code niet helemaal goed werkt. Zoeken gaat maar een richting op en dat is naar beneden. Gaat niet weer terug naar boven. Het zou mooi zijn als de code ook weer naar boven kan zoeken.
 
Ik vermoed dat je meerdere zoek- en vervang acties op hetzelfde document loslaat. Als je zo'n zoekactie start met
Code:
Selection.HomeKey Unit:=wdStory
dan begint die altijd bovenaan.
 
Terug
Bovenaan Onderaan