Suchen und Ersetzen in Word - hat das jemand schon gemacht ?

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Suchen und Ersetzen in Word - hat das jemand schon gemacht ?

Beitrag von brandelh »

Hi,

ich will suchen und ersetzen in Word per ActiveX steuern, das ist das Macro, aber wie übersetzt man das ?

Code: Alles auswählen

Sub Makro3()
'
' Makro3 Makro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "{Inhalt1}"
        .Replacement.Text = "Test"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
hat das schon jemand gemacht und kann mir Beispiel code geben ?
Das Alaska Beispiel selbst ersetzt Bookmarks, die habe ich aber nicht.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suchen und Ersetzen in Word - hat das jemand schon gemacht ?

Beitrag von brandelh »

Ich habe das mal so übersetzt, aber spätestens bei Execute weiß ich nicht wie wir das übergeben

Code: Alles auswählen

function WordReplace(oWord,cVon,cNach)
   local oSel
  oSel := oWord:selection
  oSel:Find:ClearFormatting
  oSel:Find:Replacement:ClearFormatting
  oSel:Find:Text := cVon
  oSel:Find:Replacement:Text := cNach
  oSel:Find:Forward = True
  oSel:Find:Wrap = wdFindContinue
  oSel:Find:Format = False
  oSel:Find:MatchCase = False
  oSel:Find:MatchWholeWord = False
  oSel:Find:MatchWildcards = False
  oSel:Find:MatchSoundsLike = False
  oSel:Find:MatchAllWordForms = False
  oSel:Find:Execute Replace:=wdReplaceAll

return nil
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suchen und Ersetzen in Word - hat das jemand schon gemacht ?

Beitrag von brandelh »

Hi,

im Alaska Forum habe ich einen LINK auf die VBA Hilfe von Word 2003 gefunden, dort kann man die nötigen Parameter von EXECUTE() nachlesen.
Damit habe ich das hier so übersetzt und es funktioniert:

Code: Alles auswählen


#include "activex.ch"
#include "word2010.ch"


//////////////////////////////////////////////////////////////////////
// Main()-Prozedur der Anwendung
//////////////////////////////////////////////////////////////////////
PROCEDURE main
  LOCAL cDir,cFile, cSaveAs
  LOCAL oWord,oDoc, aReplace

  set charset to ansi

  aReplace := { { "{Inhalt1}"  , "Test-Dokument" } ,;
                       { "Suchen"    , "Ersetzen" } }

  set alternate to Ersetzen-LOG.TXT
  set alternate on

  // Ermitteln des voll-qualifizierten Pfades
  // oder fix vorgeben
  cDir    := CurDrive()+":\"+CurDir()
  cFile   := cDir+"\Test.docx"
  cSaveAs := cDir+"\Test1.docx"

  // Erzeugen einer ActiveX-Komponente
  oWord := CreateObject("Word.Application")
  IF Empty( oWord )
    MsgBox( "Microsoft Word ist nicht installiert" )
  ENDIF

  oWord:visible := .T.

  // Oeffnen eines Word-Dokuments
  oWord:documents:open( cFile )
  oDoc := oWord:ActiveDocument

  aEval( aReplace, {|aR| WordReplace(oWord,aR[1],aR[2]) } )

  // Speichern des Ergebnisses
  IF(ValType(cSaveAs)=="C")
    oDoc:saveas(cSaveAs)
  ENDIF

/*
  IF(ValType(lPrint)=="L" .AND. lPrint)
    oDoc:PrintOut()
  ENDIF
*/

  // Schliessen des Dokuments und zerstoeren das
  // ActiveX-Objektes.
  oDoc:close()
  oWord:Quit()
  oWord:destroy()

  ? "Dokument", cSaveAs, "erzeugt"
  set alternate to
  inkey(20)
RETURN

function WordReplace(oWord,cVon,cNach)
   local oSel, lOK
  oSel := oWord:selection
  oSel:Find:ClearFormatting()
  oSel:Find:Replacement:ClearFormatting()
  // aus der Word2003 Hilfedatei stammt die Parameterzeile
  lOK := oSel:Find:Execute(  cVon,;   // FindText
                              .f.,;   // MatchCase
                              .f.,;   // MatchWholeWord
                              .f.,;   // MatchWildcards
                              .f.,;   // MatchSoundsLike
                              .f.,;   // MatchAllWordForms
                              .t.,;   // Forward
                   wdFindContinue,;   // Wrap
                              .f.,;   // Format
                            cNach,;   // ReplaceWith
                     wdReplaceAll,;   // Replace
                              .f.,;   // MatchKashida
                              .f.,;   // MatchDiacritics
                              .f.,;   // MatchAlefHamza
                              .f.  )  // MatchControl

  ? "ersetze",cVon,cNach, lOK

return lOK
Dateianhänge
word2010.CH.zip
Definitionen für Word2010 als CH Datei
(35.57 KiB) 312-mal heruntergeladen
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suchen und Ersetzen in Word - hat das jemand schon gemacht ?

Beitrag von brandelh »

Und wenn man weiß, dass man ein FIND OBJEKT braucht, das eine EXECUTE METHODE hat, dann findet an sogar auf der deutschen Online Hilfe passende Syntax Infos.

https://msdn.microsoft.com/de-de/vba/wo ... ethod-word
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suchen und Ersetzen in Word - hat das jemand schon gemacht ?

Beitrag von brandelh »

Mit einer Google Suche habe ich diesen Beitrag von TOM gefunden, der passt auch zum Thema:

:arrow: https://xbaseforum.de/viewtopic.php?f=50&t=2963
Gruß
Hubert
Antworten