Ein kleiner Abstecher…

01. Februar 2008

…in die wunderliche Welt von Microsoft, genauer gesagt in die Welt von M$ Word. Ich hab mir heute unter größten Suchanstrengungen zwei Makros zusammengefummelt, die mir zukünftig die Arbeit sehr erleichtern werden und da ich bei meiner Suche im Internet keinerlei Makros mit dieser Funktionalität finden konnte, dacht ich mir, ich poste sie mal hier.

1. Da die meisten Portale und Foren keine HTML Tags akzeptieren und auch kein TinyMCE haben, sondern mit vorgefertigten Tags arbeiten, brauchte ich ein Makro, das mir kursiven und fettgedruckten Text sucht und in die entsprechenden Tags schreibt. Aus “ein Text mit kursiver und fetter Schrift” sollte am Ende “ein Text mit [i]kursiver[/i] und [b]fetter[/b] Schrift” werden (die Tags mit den eckigen Klammern werden beim Animexx verwendet, kann man dann aber beliebig für seine Zwecke ändern). Das Makro sieht dann so aus:

  1. Sub kursiv_bold_ersetzen()
  2. '
  3. ' kursiv_bold_ersetzen Makro
  4. ' Makro aufgezeichnet am 01.02.2008 von Salieri
  5. '
  6. Selection.Find.ClearFormatting
  7. Selection.Find.Font.Italic = True
  8. Selection.Find.Replacement.ClearFormatting
  9. With Selection.Find
  10. .Text = ""
  11. .Replacement.Text = "[i]^&[/i]"
  12. .Forward = True
  13. .Wrap = wdFindContinue
  14. .Format = True
  15. .MatchCase = False
  16. .MatchWholeWord = False
  17. .MatchWildcards = False
  18. .MatchSoundsLike = False
  19. .MatchAllWordForms = False
  20. End With
  21. Selection.Find.Execute Replace:=wdReplaceAll
  22. Selection.Find.ClearFormatting
  23. Selection.Find.Font.Bold = True
  24. Selection.Find.Replacement.ClearFormatting
  25. With Selection.Find
  26. .Text = ""
  27. .Replacement.Text = "[b]^&[/b]"
  28. .Forward = True
  29. .Wrap = wdFindContinue
  30. .Format = True
  31. .MatchCase = False
  32. .MatchWholeWord = False
  33. .MatchWildcards = False
  34. .MatchSoundsLike = False
  35. .MatchAllWordForms = False
  36. End With
  37. Selection.Find.Execute Replace:=wdReplaceAll
  38. End Sub

Ich habe keinerlei Ahnung von Word Makros, mag also sein dass diverse Dinge, die Word mir da reinschreibt, überflüssig sind. Ich weiß nich mal, was für ne Programmiersprache das ist. Wichtig ist aber, dass es funktioniert. Selection.Find.Font.Italic = True gibt die Formatierung an und .Replacement.Text = “[b]^&[/b]” die Art, wie die Ergebnisse verarbeitet werden. Das ^& ist wohl in dem Fall der entsprechende Platzhalter. Es geht, aber ganz verstanden hab ich das System dahinter noch nicht. Denn im nächsten Beispiel sieht der Platzhalter anders aus:

2. Da diese Tags überall unterschiedlich sind, hab ich mir auch gleich ein Makro geschrieben, um das ganze Dokument von einem Tagsystem ins andere überführen zu können. In meinem Beispiel überführe ich einen für Fanfiktion.de formatierten Text in einen Animexx konformen Text. Im FFde sind kursive Texte mit [style type=”italic”]text[/style] markiert, fettgedruckte mit [style type=”bold”]text[/style]. Da das schließende Tag jeweils gleich ist, war’s mit einer einfachen Ersetzung nicht getan, also mussten Platzhalter für die Suche her und das Ergebnis sieht so aus:

  1. Sub ffde_nach_animexx()
  2. '
  3. ' ffde_nach_animexx Makro
  4. ' Makro aufgezeichnet am 01.02.2008 von Salieri
  5. '
  6. Selection.Find.ClearFormatting
  7. Selection.Find.Replacement.ClearFormatting
  8. With Selection.Find
  9. .Text = "\[style type=""bold""\](*)\[/style\]"
  10. .Replacement.Text = "[b]\1[/b]"
  11. .Forward = True
  12. .Wrap = wdFindContinue
  13. .Format = False
  14. .MatchCase = False
  15. .MatchWholeWord = False
  16. .MatchAllWordForms = False
  17. .MatchSoundsLike = False
  18. .MatchWildcards = True
  19. End With
  20. Selection.Find.Execute Replace:=wdReplaceAll
  21. With Selection.Find
  22. .Text = "\[style type=""italic""\](*)\[/style\]"
  23. .Replacement.Text = "[i]\1[/i]"
  24. .Forward = True
  25. .Wrap = wdFindContinue
  26. .Format = False
  27. .MatchCase = False
  28. .MatchWholeWord = False
  29. .MatchAllWordForms = False
  30. .MatchSoundsLike = False
  31. .MatchWildcards = True
  32. End With
  33. Selection.Find.Execute Replace:=wdReplaceAll
  34. End Sub