Macro in Word Suchen und Ersetzen

Dieses Thema Macro in Word Suchen und Ersetzen im Forum "Microsoft Office Suite" wurde erstellt von Sukka, 15. Mai 2005.

Thema: Macro in Word Suchen und Ersetzen Ich will ein bestimmter Text bzw. Zeichenfolge in einem doc nur dann finden und ersetzen, wenn diese Zeichen einem...

  1. Ich will ein bestimmter Text bzw. Zeichenfolge
    in einem doc nur dann finden und ersetzen,
    wenn diese Zeichen einem bestimmten Font haben.
    Wie schreibt man das am besten?
    Vielen Dank!
     
  2. Halli hallo

    ich hab hier mal etwas kleines zusammen geschrieben.

    Code:
    Sub SuchenErsetzten()
    
    'Hier gibst du das Suchwort ein
    Const c_suchwort = hi
    'Hier der die Schriftart
    Const c_fontname = Times New Roman
    'Hier die Schriftgrösse
    Const c_fontsize = 16
    'Hier ob es Fett ist oder nicht (True oder False)
    Const c_fontbold = True
    'Hier ob es Kursiv ist oder nicht (True oder False)
    Const c_fontitalic = True
    'Hier das Wort welches dann anstatt dem alten steht
    Const c_ersetzten = hello
    
    Set myrange = ActiveDocument.Content
    With myrange.Find
    .Text = c_suchwort
    .Font.Bold = c_fontbold
    .Font.Size = c_fontsize
    .Font.Name = c_fontname
    .Font.Italic = c_fontitalic
    .Execute ReplaceWith:=c_ersetzten, Replace:=wdReplaceAll
    End With
    
    End Sub
    bei fragen bitte melden ^^

    mfg billy

    Hinweis: im moment ist es so eingestellt dass ALLE Vorkommen ersetzt werden ^^
     
  3. Hi billy,

    dann versuch es mal so:
    Code:
    Sub SuchenErsetzten()
     ->Hier gibst du das Suchwort ein
      Const c_suchwort = hi
     ->Hier der die Schriftart
      Const c_fontname = Times New Roman
     ->Hier die Schriftgrösse
      Const c_fontsize = 16
     ->Hier ob es Fett ist oder nicht (True oder False)
      Const c_fontbold = True
     ->Hier ob es Kursiv ist oder nicht (True oder False)
      Const c_fontitalic = True
     ->Hier das Wort welches dann anstatt dem alten steht
      Const c_ersetzten = hello
    
      Set myrange = ActiveDocument.Content
      With myrange.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Font.Bold = c_fontbold
        .Font.Size = c_fontsize
        .Font.Name = c_fontname
        .Font.Italic = c_fontitalic
        .Text = c_suchwort
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = True
        .MatchWholeWord = True
        .Replacement.Text = c_ersetzten
        .Execute Replace:=wdReplaceAll
      End With
    End Sub
    Gruß Matjes  :)
     
  4. aber meine lösung war auch gut :'( oder?
     
  5. Hi billy,

    war schon ganz gut.  :D Es fehlte nur die Initialisierung und der Schalter für Format (  .Format = True ).

    Initialisierung ist wichtig, da sich Find die Einstellungen merkt. Wenn Du dann nochmal Find mit anderen Einstellungen benutzt, findet es eventuell ganz andere Stellen als du wolltest.   ;)

    Damit das eingestellte Format bei der Suche berücksichtigt wird, muß der Schalter Format auf True stehen.

    Gruß Matjes  :)
     
  6. grml

    bin ja noch jung und blutig ^^
     
  7. Vielen Dank für alle eure guten Bemühungen.
    Ihr habt mir gut geholfen, ich danke euch!

    Wenn ich noch Probleme beim Integrieren habe melde ich mich.
    ( hoffentlich bekomme ich das hin)
    Der Sinn des Macro soll sein, daß man schnell einen Insellösungsfont
    in Unicode konvertieren kann. Dabei geht es darum so ca. 20 nicht
    kompatible Zeichen zu ersetzen. Mein jetziges Macro konnte
    mit Mischdokumente nicht differenziert genug umgehen.   
    Bestimmt kann man das eleganter schreiben als ich es bis
    jetzt habe. Am Ende sollte dann alles das was z.B. Times_CSX+ ist
    noch in ein Unicode Font umgewandelt werden.

    Hier das Macro wie ich es bisher hatte:

    Code:
     
    Sub A_Times_CSX_Unicode()
    ' Konvertiert Times_CSX+ nach Unicode
    ' Times_CSX_Unicode Makro erstellt am 12.05.2005 von A42
    '
        Dim Zeichen_alt(15) As String
        Dim Zeichen_neu(15) As String
        
        Zeichen_alt(1) = à
        Zeichen_neu(1) = ChrW(257)
        Zeichen_alt(2) = ü
        Zeichen_neu(2) = ChrW(7747)
        Zeichen_alt(3) = å
        Zeichen_neu(3) = ChrW(363)
        Zeichen_alt(4) = õ
        Zeichen_neu(4) = ChrW(7751)
        Zeichen_alt(5) = ã
        Zeichen_neu(5) = ChrW(299)
        Zeichen_alt(6) = ï
        Zeichen_neu(6) = ChrW(7749)
        Zeichen_alt(7) = ñ
        Zeichen_neu(7) = ChrW(7789)
        Zeichen_alt(8) = ó
        Zeichen_neu(8) = ChrW(7693)
        Zeichen_alt(9) = ¤
        Zeichen_neu(9) = ChrW(241)
        Zeichen_alt(10) = â
        Zeichen_neu(10) = ChrW(256)
        Zeichen_alt(11) = ë
        Zeichen_neu(11) = ChrW(7735)
        Zeichen_alt(12) = ¥
        Zeichen_neu(12) = ChrW(209)
        Zeichen_alt(13) = ChrW(230)
        Zeichen_neu(13) = ChrW(362)
        Zeichen_alt(14) = ChrW(228)
        Zeichen_neu(14) = ChrW(664)
        Zeichen_alt(15) = `
        Zeichen_neu(15) =->
        
    For I = 1 To 15
    
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = Zeichen_alt(I)
            .Replacement.Text = Zeichen_neu(I)
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = True
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
          End With
        Selection.Find.Execute Replace:=wdReplaceAll
     Next I
    
    End Sub
    
    
     
  8. Irgendwie habe ich es noch nicht hinbekommen.
    Das Macro kann einfach die Finger nicht von
    Textstellen lassen die nicht in Times_CSX+ sind.

    Die ausschließliche Beschränkung auf Times_CSX+
    muß man ihm noch beibringen.

    Auch die ersetzten Zeichen sollen alle in Times_CSX+ bleiben.
    Erst wenn alles ersetzt ist, erst dann soll er den Font
    Times_CSX+ an allen Stellen ändern können/dürfen.

    Gruß Sukka
     
  9. Hallo Sukka,

    probiere mal folgende Version, ob die deinen Wünschen entspricht.

    hab ich so verstanden, dass der Font einfach beibehalten werden soll.

    Gruß Matjes :)
    Code:
    Sub A_Times_CSX_Unicode()
    ' Konvertiert Times_CSX+ nach Unicode
    '
        
      Const c_FontName = Times_CSX+
        
      Dim Zeichen_alt(1 To 15) As String
      Dim Zeichen_neu(1 To 15) As String
      Dim I As Long
      
      Zeichen_alt(1) = à:        Zeichen_neu(1) = ChrW(257)
      Zeichen_alt(2) = ü:        Zeichen_neu(2) = ChrW(7747)
      Zeichen_alt(3) = å:        Zeichen_neu(3) = ChrW(363)
      Zeichen_alt(4) = õ:        Zeichen_neu(4) = ChrW(7751)
      Zeichen_alt(5) = ã:        Zeichen_neu(5) = ChrW(299)
      Zeichen_alt(6) = ï:        Zeichen_neu(6) = ChrW(7749)
      Zeichen_alt(7) = ñ:        Zeichen_neu(7) = ChrW(7789)
      Zeichen_alt(8) = ó:        Zeichen_neu(8) = ChrW(7693)
      Zeichen_alt(9) = ¤:        Zeichen_neu(9) = ChrW(241)
      Zeichen_alt(10) = â:       Zeichen_neu(10) = ChrW(256)
      Zeichen_alt(11) = ë:       Zeichen_neu(11) = ChrW(7735)
      Zeichen_alt(12) = ¥:       Zeichen_neu(12) = ChrW(209)
      Zeichen_alt(13) = ChrW(230): Zeichen_neu(13) = ChrW(362)
      Zeichen_alt(14) = ChrW(228): Zeichen_neu(14) = ChrW(664)
      Zeichen_alt(15) = `:       Zeichen_neu(15) =->
        
      For I = 1 To 15
        With Selection.Find
          .ClearFormatting
          .Replacement.ClearFormatting
          .Font.Name = c_FontName
          .Replacement.Font.Name = c_FontName
          .Text = Zeichen_alt(I)
          .Replacement.Text = Zeichen_neu(I)
          .Forward = True
          .Wrap = wdFindContinue
          .Format = True
          .MatchCase = True
          .MatchWholeWord = False
          .MatchWildcards = False
          .MatchSoundsLike = False
          .MatchAllWordForms = False
          .Execute Replace:=wdReplaceAll
        End With
      Next I
    
    End Sub
     
  10. Vielen Dank!
    Ich glaube damit kann man leben. Die deutschen ü und ö
    die ja in einem anderen Font sind, werden nicht mehr angefasst.

    Dass Word den Zeichensatz der Zeichen welche er in einem
    Font nicht findet eigenständig in einen anderen ändert, scheint
    an einer Eigenart von Word oder an einer Einstellung an Word
    zu liegen.
    Jetzt ist noch das Problem nach dem Umwandeln genau die
    Stellen die zuvor in Times_CSX+ waren insgesamt in einen
    Unicode-Font umzuwandeln. Dazu braucht man jetzt noch einen
    Schritt. Vielleicht fällt dir dazu noch was ein?
    Es scheint ja so zu sein, daß es hier Programmierer gibt
    welche aus dem Handgelenk wissen wie man so was schreibt.
    Für Dinge, bei denen ich Stunden mühevoll by Try und Error
    zugebracht hätte. Mir mangelt es auch an der vollen und breiten
    wie ausführlichen Kommentierung aller einzelnen Schritte und
    Befehlen in voller Länge und Ausführlichkeit welche nötig wäre
    diese Dinge auch in meinen unvollkommenen Kopf noch hinein zu
    bekommen.
     
Die Seite wird geladen...

Macro in Word Suchen und Ersetzen - Ähnliche Themen

Forum Datum
Word Macro Problem Microsoft Office Suite 23. Aug. 2006
MacroButton in Word-Dokument / Autotext Windows XP Forum 22. Dez. 2002
Macrorit Disk Partition Expert Free Edition -> Portables All-in-One Partitionstool Software: Empfehlungen, Gesuche & Problemlösungen 11. Apr. 2014
Macro? Microsoft Office Suite 13. Juli 2012
Über Macro Speichern Microsoft Office Suite 7. Jan. 2010