Het toevoegen van Smart Quotes door Macro Tekst

Mary maakt gebruik van macro's wel een beetje om tekst toe te voegen aan haar documenten. Het probleem is dat als de toegevoegde tekst bevat apostrof, die worden toegevoegd aan de tekst als "recht" in plaats van "slim." Ze geeft aan dat ze de AutoOpmaak tijdens typen instelling in plaats dat Woord vertelt om slimme quotes in plaats van rechte aanhalingstekens te gebruiken, maar dat heeft geen invloed op de tekst ingevoegd bij mijn macro's.

Wanneer u tekst in een document in te voegen met behulp van een macro in plaats van te typen, wordt de tekst in elk geval anders behandeld door Word. Tekst die u typt wordt verwerkt als elk teken wordt ingevoerd. Tekst die door een macro wordt geplaatst, is meer als tekst die wordt geplakt in een document behandeld. Dus, als u typt "dit is mijn tekst," Word doet zijn verwerking na elk personage. Dat betekent dat er tijd is voor het programma om AutoOpmaak en AutoCorrectie en al de rest van de dingen die Woord doet om tekst te verwerken controleren.

Wanneer u een macro gebruiken om dezelfde tekst in te voeren, wordt het ingevoegd als een blok, alsof je het geplakt op zijn plaats. Dit betekent dat iets in het midden van de tekst (bijvoorbeeld offertes of apostroffen) die zou zijn verwerkt door AutoOpmaak niet "gevangen" en verwerkt. Dit betekent dat de rechte aanhalingstekens niet worden veranderd om slimme quotes als ze zijn opgenomen in de tekst die door de macro wordt geplaatst.

Er zijn een paar manieren waarop je een oplossing voor dit benaderen. De eerste is om de macro te hebben, nadat het voegt al uw tekst, doe een vondst en vervang operatie op alle offertes met citaten en apostrof met een apostrof te vervangen. Dit klinkt misschien vreemd, maar als je AutoFormat terwijl u typt om slimme aanhalingstekens te gebruiken, het zoeken en vervangen operatie zal uiteindelijk het veranderen van de rechte aanhalingstekens om slimme quotes.

Deze aanpak is de manier om te gaan als je macro geplaatst veel tekst in het document. Als deze is het plaatsen van kleinere stukken tekst, dan is het makkelijker om ervoor te zorgen dat de macro wordt het plaatsen van de juiste ASCII-codes voor slimme aanhalingstekens om mee te beginnen. De ASCII-codes voor een regelmatige offerte is 34, maar een slimme opening offerte heeft een code van 147 en een afsluitende citaat is 148. Er zijn vergelijkbare verschillen in de gebruikte codes voor de apostrof. Als u de Chr functie gebruiken om het juiste teken in te voegen, beschikt u altijd over de quotes die u wilt.

Een manier om dat te doen is de code gelijk gebruiken om de volgende in de buurt van het begin van je macro:

Als Options.AutoFormatAsYouTypeReplaceQuotes = True Dan
sAposOpen = Chr (145)
sAposClose = Chr (146)
sQuoteOpen = Chr (147)
sQuoteClose = Chr (148)
Anders
sAposOpen = Chr (39)
sAposClose = Chr (39)
sQuoteOpen = Chr (34)
sQuoteClose = Chr (34)
End If

Deze code controleert of de AutoOpmaak tijdens typen instelling is ingeschakeld voor slimme quotes. Als het is, dan is de vier variabelen zijn ingesteld op de juiste ASCII-codes voor slimme quotes. Als het niet wordt ingeschakeld en de variabelen op de juiste codes voor rechte aanhalingstekens. U kunt dan later deze variabelen gebruiken in uw macro gebruiken als u monteren en tekst invoegen. Bijvoorbeeld, als u de tekst wilt invoegen "mijn broer's huis is in de straat," je kan deze in te voegen op deze manier:

sMyString = "mijn broer" & sAposClose & 's huis is in de straat "
Selection.InsertAfter "" & sMyString

Als u deze aanpak hinderlijk vinden (het breken van je snaren op deze manier), dan is er een andere optie. U kunt uw eigen functie die de juiste vervangingen doet in je snaren in een keer te maken. De volgende paar macro's zal het werk goed te doen:

Functie RepQuotes (sRaw As String) As String
Dim Stemp als Koord
Dim sAposOpen als Koord
Dim sAposClose als Koord
Dim sQuoteOpen als Koord
Dim sQuoteClose als Koord

Als Options.AutoFormatAsYouTypeReplaceQuotes = True Dan
sAposOpen = Chr (145)
sAposClose = Chr (146)
sQuoteOpen = Chr (147)
sQuoteClose = Chr (148)
Anders
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

Functie RepText (zonde als Koord, sFind als Koord, srep As String) As String
Dim x As Integer

x = InStr (SIN, sFind)
y = 1
Terwijl x> 0
sin = Links (sin, x - 1) & srep & Mid (sin, x + Len (sFind))
y = x + Len (SREP)
x = InStr (y, zonde, sFind)
Zich begeven
RepText = sin
End Function

Wat je doet is om je tekst strings te bouwen als normaal, en dan passeren ze door de RepQuotes macro. De macro bepaalt de juiste citaten te gebruiken en vervolgens doet de conversies. Het bepaalt of een citaat is een opening offerte of eindigend citaat in de tekst van de vraag of er een spatie voor de offerte of niet. Als er wordt aangenomen dat een openingscitaat zijn; zo niet, dan is een slotkoers.

WordTips is uw bron voor kosteneffectieve Microsoft Word training. (Microsoft Word is de meest populaire tekstverwerker in de wereld.) Deze tip (3363) is van toepassing op Microsoft Word 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van het Woord (Word 2007 en later) hier: Het toevoegen van Smart Quotes door Macro tekst.