Mary usa spesso le macro per aggiungere testo ai suoi documenti. Il problema è che se il testo aggiunto contiene apostrofi, questi vengono aggiunti al testo come “semplici” anziché “intelligenti”. Indica che ha l’impostazione Formattazione automatica durante la digitazione che dice a Word di utilizzare virgolette intelligenti invece di virgolette semplici, ma ciò non ha alcun effetto sul testo inserito dalle mie macro.

Quando si inserisce del testo in un documento utilizzando una macro anziché digitando, il testo in ogni caso viene gestito in modo diverso da Word. Il testo digitato viene elaborato durante l’immissione di ogni carattere. Il testo inserito da una macro viene trattato più come il testo incollato in un documento. Quindi, se digiti “questo è il mio testo”, Word esegue la sua elaborazione dopo ogni carattere. Ciò significa che il programma ha tempo per controllare la formattazione automatica e la correzione automatica e tutte le altre operazioni eseguite da Word per elaborare il testo.

Quando si utilizza una macro per inserire lo stesso testo, viene inserito come un blocco, come se lo avessi incollato in posizione. Ciò significa che i caratteri nel mezzo del testo (come virgolette o apostrofi) che sarebbero stati elaborati dalla formattazione automatica non vengono “catturati” ed elaborati. Ciò significa che le virgolette semplici non vengono modificate in virgolette intelligenti se sono contenute nel testo inserito dalla macro.

Ci sono un paio di modi in cui puoi avvicinarti a una soluzione a questo problema. Il primo è fare in modo che la tua macro, dopo aver inserito tutto il tuo testo, esegua un’operazione di ricerca e sostituzione per sostituire tutte le virgolette con virgolette e apostrofi con apostrofi. Può sembrare strano, ma se la formattazione automatica durante la digitazione è impostata per utilizzare virgolette intelligenti, l’operazione di ricerca e sostituzione finirà per modificare le virgolette semplici in virgolette intelligenti.

Questo approccio è la strada da percorrere se la tua macro inserisce molto testo nel documento. Se inserisce porzioni di testo più piccole, è più facile assicurarsi che la macro inserisca i codici ASCII corretti per le virgolette intelligenti. I codici ASCII per una citazione normale sono 34, ma una citazione di apertura intelligente ha un codice di 147 e una citazione di chiusura è 148. Esistono differenze simili nei codici usati per gli apostrofi. Se utilizzi la funzione Chr per inserire il carattere corretto, avrai sempre le virgolette che desideri.

Un modo per farlo è usare un codice simile al seguente all’inizio della tua macro:

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

Questo codice verifica se l’impostazione Formattazione automatica durante la digitazione è attivata per le virgolette intelligenti. Se lo è, le quattro variabili sono impostate sui codici ASCII corretti per le virgolette intelligenti. Se non è attivato, le variabili vengono impostate sui codici corretti per le virgolette semplici. Successivamente è possibile utilizzare queste variabili nella macro durante l’assemblaggio e l’inserimento del testo.

Ad esempio, se vuoi inserire il testo “la casa di mio fratello è in fondo alla strada”, puoi inserirlo in questo modo:

sMyString = "my brother" & sAposClose & "s house is down the street"

Selection.InsertAfter " " & sMyString

Se trovi fastidioso questo approccio (spezzare le corde in questo modo), allora c’è un’altra opzione. È possibile creare la propria funzione che esegue le sostituzioni appropriate nelle stringhe contemporaneamente.

La seguente macro farà bene il lavoro:

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 = Replace(sRaw, " " & Chr(39), sAposOpen)

sTemp = Replace(sTemp, Chr(39), sAposClose)

sTemp = Replace(sTemp, " " & Chr(34), sQuoteOpen)

sTemp = Replace(sTemp, Chr(34), sQuoteClose)

RepQuotes = sTemp End Function

Quello che devi fare è costruire normalmente le tue stringhe di testo e poi passarle attraverso la macro RepQuotes. La macro determina le virgolette corrette da utilizzare e quindi esegue le conversioni. Determina se una citazione è una citazione di apertura o una citazione finale nel testo in base alla presenza o meno di uno spazio prima della citazione. Se esiste, si presume che sia una citazione di apertura; se no, allora è una citazione di chiusura.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (11833) si applica a Microsoft Word 2007, 2010, 2013 e 2016. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Word qui: