Hinzufügen intelligenter Anführungszeichen über Makrotext (Microsoft Word)
Mary verwendet häufig Makros, um ihren Dokumenten Text hinzuzufügen. Das Problem ist, dass, wenn der hinzugefügte Text Apostrophe enthält, diese dem Text als „gerade“ und nicht als „intelligent“ hinzugefügt werden. Sie gibt an, dass die Einstellung „AutoFormat während der Eingabe“ aktiviert ist, mit der Word angewiesen wird, intelligente Anführungszeichen anstelle von geraden Anführungszeichen zu verwenden. Dies hat jedoch keine Auswirkungen auf den von meinen Makros eingefügten Text.
Wenn Sie Text mithilfe eines Makros in ein Dokument einfügen, anstatt ihn einzugeben, wird der Text von Word jeweils anders behandelt. Der von Ihnen eingegebene Text wird bei der Eingabe jedes Zeichens verarbeitet. Text, der von einem Makro eingefügt wird, wird eher wie Text behandelt, der in ein Dokument eingefügt wird. Wenn Sie also „Dies ist mein Text“ eingeben, wird Word nach jedem einzelnen Zeichen verarbeitet. Das bedeutet, dass das Programm Zeit hat, AutoFormatting und AutoCorrect sowie alle anderen Aufgaben von Word zur Textverarbeitung zu überprüfen.
Wenn Sie ein Makro verwenden, um denselben Text einzugeben, wird er als Block eingefügt, als hätten Sie ihn an Ort und Stelle eingefügt. Dies bedeutet, dass Zeichen in der Mitte des Textes (wie Anführungszeichen oder Apostrophe), die von AutoFormatting verarbeitet worden wären, nicht „abgefangen“ und verarbeitet werden. Dies bedeutet, dass gerade Anführungszeichen nicht in intelligente Anführungszeichen geändert werden, wenn sie in Text enthalten sind, der von Ihrem Makro eingefügt wird.
Es gibt verschiedene Möglichkeiten, wie Sie eine Lösung für dieses Problem finden können. Das erste ist, dass Ihr Makro nach dem Einfügen Ihres gesamten Textes eine Such- und Ersetzungsoperation ausführt, um alle Anführungszeichen durch Anführungszeichen und Apostrophe durch Apostrophe zu ersetzen. Dies mag seltsam klingen, aber wenn Sie AutoFormat während der Eingabe so eingestellt haben, dass intelligente Anführungszeichen verwendet werden, werden beim Suchen und Ersetzen die geraden Anführungszeichen in intelligente Anführungszeichen geändert.
Dieser Ansatz ist der richtige Weg, wenn Ihr Makro viel Text in das Dokument eingefügt hat. Wenn kleinere Textblöcke eingefügt werden, ist es einfacher sicherzustellen, dass das Makro zunächst die richtigen ASCII-Codes für intelligente Anführungszeichen einfügt. Die ASCII-Codes für ein reguläres Zitat sind 34, aber ein intelligentes Eröffnungszitat hat einen Code von 147 und ein Schlusszitat von 148. Es gibt ähnliche Unterschiede bei den Codes, die für Apostrophe verwendet werden. Wenn Sie die Chr-Funktion verwenden, um das richtige Zeichen einzufügen, haben Sie immer die gewünschten Anführungszeichen.
Eine Möglichkeit, dies zu tun, besteht darin, am Anfang Ihres Makros Code zu verwenden, der dem folgenden ähnelt:
If Options.AutoFormatAsYouTypeReplaceQuotes = True Then sAposOpen = Chr(145) sAposClose = Chr(146) sQuoteOpen = Chr(147) sQuoteClose = Chr(148) Else sAposOpen = Chr(39) sAposClose = Chr(39) sQuoteOpen = Chr(34) sQuoteClose = Chr(34) End If
Dieser Code prüft, ob die Einstellung AutoFormat während der Eingabe für intelligente Anführungszeichen aktiviert ist. Wenn dies der Fall ist, werden die vier Variablen auf die richtigen ASCII-Codes für intelligente Anführungszeichen gesetzt. Wenn es nicht aktiviert ist, werden die Variablen auf die richtigen Codes für gerade Anführungszeichen gesetzt. Sie können diese Variablen später in Ihrem Makro verwenden, wenn Sie Text zusammenstellen und einfügen.
Wenn Sie beispielsweise den Text „Das Haus meines Bruders ist die Straße runter“ einfügen möchten, können Sie ihn folgendermaßen einfügen:
sMyString = "my brother" & sAposClose & "s house is down the street" Selection.InsertAfter " " & sMyString
Wenn Sie diesen Ansatz als störend empfinden (indem Sie Ihre Saiten auf diese Weise aufbrechen), gibt es eine andere Option. Sie können Ihre eigene Funktion erstellen, die gleichzeitig die richtigen Ersetzungen in Ihren Zeichenfolgen vornimmt.
Das folgende Makropaar erledigt die Aufgabe gut:
Function RepQuotes(sRaw As String) As String Dim sTemp As String Dim sAposOpen As String Dim sAposClose As String Dim sQuoteOpen As String Dim sQuoteClose As String If Options.AutoFormatAsYouTypeReplaceQuotes = True Then sAposOpen = Chr(145) sAposClose = Chr(146) sQuoteOpen = Chr(147) sQuoteClose = Chr(148) Else sAposOpen = Chr(39) sAposClose = Chr(39) sQuoteOpen = Chr(34) sQuoteClose = Chr(34) End If sTemp = RepText(sRaw, " " & Chr(39), sAposOpen) sTemp = RepText(sTemp, Chr(39), sAposClose) sTemp = RepText(sTemp, " " & Chr(34), sQuoteOpen) sTemp = RepText(sTemp, Chr(34), sQuoteClose) RepQuotes = sTemp End Function
Function RepText(sIn As String, sFind As String, sRep As String) As String Dim x As Integer x = InStr(sIn, sFind) y = 1 While x > 0 sIn = Left(sIn, x - 1) & sRep & Mid(sIn, x + Len(sFind)) y = x + Len(sRep) x = InStr(y, sIn, sFind) Wend RepText = sIn End Function
Sie konstruieren Ihre Textzeichenfolgen wie gewohnt und übergeben sie dann über das RepQuotes-Makro. Das Makro bestimmt die richtigen Anführungszeichen und führt dann die Konvertierungen durch. Es bestimmt, ob ein Zitat ein Eröffnungs- oder ein Endzitat im Text ist, indem vor dem Zitat ein Leerzeichen steht oder nicht. Wenn dies der Fall ist, wird davon ausgegangen, dass es sich um ein Eröffnungszitat handelt. Wenn nicht, dann ist es ein abschließendes Zitat.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.
(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (3363) gilt für Microsoft Word 97, 2000, 2002 und 2003. Sie finden eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Word (Word 2007) und später) hier: