In Newsgruppen ist es nach wie vor üblich und auch erwünscht, dass Beiträge nur in reinem Text gehalten werden. Dennoch passiert es hin und wieder, dass HTML gepostet wird. Oder man bekommt eine eMail in HTML. Diese lassen sich nur schlecht in reiner Textform weiterbearbeiten, da die Zeilen nicht umgebrochen werden etc. Das folgende Makro erledigt dies gegebenenfalls auf Knopfdruck: es entfernt alle im Dokument enthaltenen Abbildungen, versieht den Text mit der Standard-Vorlage und bricht die Zeilen auf ca. 70 Zeichen um.
Das Makro arbeitet leider nicht sehr schnell... Längere Dokumente unterwirft man ihm besser nicht, für kurze Nachrichten mit ein paar Zeilen taugt es allemal!
' Maximale Zeilenlänge: kann angepasst werden
Const MaxChars% = 70
Sub HTMLMailToText
' nur in StarWriter zulassen
If ActiveModule.Name = "StarWriter" then
' Sichtbare Formatierung des Dokumentes ausschalten
Selection.ActionStart()
' Cursor-Position merken
Selection.InsertBookmark("_mhtmp_")
' Weiche Zeilenschaltungen ersetzen
ActiveWindow.SearchSettings.RegExp = True
ActiveWindow.ReplaceAll("\n", " ")
ActiveWindow.SearchSettings.RegExp = False
' Allenfalls eingefügte Graphiken entfernen
For i% = ActiveWindow.Graphics.Count To 1 Step -1
ActiveWindow.Graphics(i%).Delete()
Next
' Gesamten Text mit Standard-Vorlage für Mail versehen
Selection.SelectAll()
Selection.StyleApply("Vorformatierter Text", 2)
Selection.ResetAttributes()
' Erste Zeile
Selection.Escape()
Selection.JumpToStartOfDoc()
Selection.Insert("> ")
Selection.GoToStartOfLine()
Selection.GoToEndOfLine(True)
' Für alle übrigen Zeilen des Dokuments durchführen:
Do
' Ist maximale Zeilenlänge überschritten?
If Len(Selection.Value) > MaxChars% Then
' Allenfalls kürzen
Do
Selection.GoToPrevWord(True)
Loop Until Len(Selection.Value) < MaxChars%
Selection.Escape()
' Umbruch einfügen
Selection.InsertPara()
Selection.Insert("> ")
Selection.GoToStartOfLine()
Selection.GoToEndOfLine(True)
' Ist Absatzende erreicht?
ElseIf Selection.IsEndOfPara Then
Selection.Escape()
' Zu nächstem Absatz wechseln
Selection.GoToNextWord(False)
Selection.Insert("> ")
Selection.GoToStartOfLine()
Selection.GoToEndOfLine(True)
' Weder Zeilenlänge noch Absatzende erreicht
Else
' Markierung erweitern bis zum nächsten Wort
Selection.GoToNextWord(True)
EndIf
Loop Until Selection.IsEndOfDoc
Selection.JumpToBookmark("_mhtmp_")
Selection.DeleteBookmark("_mhtmp_")
Selection.ActionEnd()
Else
MsgBox("Dieses Makro funktioniert nur in einem Textdokument!", _
16, "Fehler")
End If
End Sub