Creazione di un elenco dei documenti di carattere

Word consente di utilizzare i font installati sul sistema in uso. I font sono installati all'interno di Windows, in modo che siano disponibili non solo a Word, ma a tutti i programmi installati sul vostro sistema.

Quando si crea un documento sul vostro sistema, è facile sapere quali sono i caratteri utilizzati, l'elenco dei caratteri è limitato a quelle disponibili sul sistema. Se si riceve un documento da una persona diversa, tuttavia, il sistema dell'altra persona può avere diversi tipi di carattere installati di te. Ciò significa che il loro documento di Word potrebbe essere formattato con font non hanno nemmeno sul sistema.

Se si desidera generare un elenco di font utilizzati all'interno di un documento (in contrapposizione ad un elenco dei caratteri disponibili su un sistema), avete un paio di scelte. Prima di tutto, è possibile aprire il documento di Word in un editor di testo e guardarsi intorno nelle parti del documento che normalmente non vede in Word. Verso la fine del file si dovrebbe vedere un elenco di font utilizzati nel documento. Se si esegue questa operazione, però, si dovrebbe essere molto attenti a non apportare modifiche al documento di Word mentre è aperto in un editor di testo. In questo modo può facilmente rendere il documento non è più utilizzabile in Word.

Una soluzione basata su Word è quello di guardare semplicemente attraverso ogni personaggio in un documento e verificare che cosa font viene utilizzato per formattare il carattere. È un approccio di carattere per carattere necessario perché ogni personaggio potrebbe essere formattato con un carattere diverso, e VBA non consente di accedere a una raccolta di font in relazione al documento stesso, sembra che tale raccolta è mantenuta. Pertanto, il metodo più sicuro (e più lento) è fare un passo semplicemente attraverso ogni personaggio e creare la tua selezione. La seguente macro VBA realizza il compito:

Public Sub ListFontsInDoc1 ()
FontList Dim (199) As String
Dim FontCount As Integer
Dim FontName As String
Dim J As Integer, K come numero intero, L come numero intero
Dim X As Long, Y As Long
Dim FoundFont Come booleano
Dim rngChar come gamma
Dim strFontList As String

FontCount = 0
X = ActiveDocument.Characters.Count
Y = 0
'For-Next ciclo attraverso ogni personaggio
Per ogni rngChar In ActiveDocument.Characters
Y = Y + 1
FontName = rngChar.Font.Name
StatusBar = Y & ":" & X
'Controllare se carattere usato per questo char già in lista
FoundFont = False
Per J = 1 Per FontCount
Se FontList (J) = FontName Poi FoundFont = True
Successivo J
Se non FoundFont Poi
FontCount = FontCount + 1
FontList (FontCount) = FontName
End If
Successivo rngChar

'Ordinare la lista
StatusBar = "Ordinamento Elenco font"
Per J = 1 Per FontCount - 1
L = J
Per K = J + 1 Per FontCount
Se FontList (L)> FontList (K) Poi L = K
Successivo K
Se J <> L Poi
FontName = FontList (J)
FontList (J) = FontList (L)
FontList (L) = FontName
End If
Successivo J

StatusBar = ""
'Mettere in nuovo documento
Documents.Add
Selection.TypeText Text: = "Ci sono" & _
FontCount & "font utilizzati nel documento, come segue:"
Selection.TypeParagraph
Selection.TypeParagraph
Per J = 1 Per FontCount
Selection.TypeText Text: = FontList (J)
Selection.TypeParagraph
Successivo J
End Sub

Ovviamente, il più lungo del documento, il più tempo ci vorrà la macro per terminare. (Ho eseguito la macro su un documento di 1.100 pagine e ci sono voluti circa 46 minuti. In un documento di cinque pagine ci sono voluti meno di un minuto.) Al termine, la macro crea un nuovo documento che contiene un elenco ordinato dei font utilizzati.

La macro sopra passi solo attraverso il documento principale. E 'possibile che ci siano altre, differenti tipi di carattere utilizzati in altri elementi del documento. Se volete quelli inclusi nella lista, quindi è necessario utilizzare una variante del macro che prende questi elementi in considerazione. La seguente macro (ListFontsInDoc2) è molto più lungo, e l'elenco comprende anche altri tre macro che vengono chiamati dall'interno della macro principale.

Public Sub ListFontsInDoc2 ()
Dim rngStory Come Word.Range
Dim rngChar come gamma
Dim oShp Come Word.Shape
Dim FontName As String
Dim lngIndex As Long
Dim lngChar As Long
LngCharCount Dim As Long
Dim colFontsUsed As New Collection
Dim oDocList Come Word.Document

Per ogni rngStory In ActiveDocument.StoryRanges
lngChar = 0
lngCharCount = rngStory.Characters.Count
Fare
'Valutare ogni personaggio
Impostare rngChar = rngStory.Characters (1)
Se rngStory.End> 1 Then
Fare
lngChar = lngChar + 1
FontName = rngChar.Font.Name
StatusBar = "carattere Evaluauting" & lngChar & _
"Di" e lngCharCount & "caratteri nell'intervallo storia"
'Controllare se di carattere usato per questo personaggio già in lista
On Error Resume Next
'Collezione impedisce chiave aggiungendo già font
'Nella collezione
colFontsUsed.Add rngChar.Font.Name, rngChar.Font.Name
On Error GoTo 0
rngChar.MoveStart wdCharacter, 1
rngChar.MoveEnd wdCharacter, 1
'Set rngChar = rngChar.Next'
Loop Until rngChar.End = rngStory.End
End If

'Valutare forme in intestazioni e piè di pagina
Select Case rngStory.StoryType
Caso 6, 7, 8, 9, 10, 11
'No forma genera un errore che gestiamo e saltare
On Error GoTo Err_Handler
Se rngStory.ShapeRange.Count> 0 Then
Per ogni oShp In rngStory.ShapeRange
Se oShp.TextFrame.HasText Poi
lngChar = 0
lngCharCount = oShp.TextFrame.TextRange.Characters.Count
Per ogni rngChar In oShp.TextFrame.TextRange.Characters
lngChar = lngChar + 1
FontName = rngChar.Font.Name
StatusBar = "carattere Evaluauting" & _
lngChar e "di" e lngCharCount & _
"caratteri nell'intervallo storia"
On Error Resume Next
colFontsUsed.Add rngChar.Font.Name, rngChar.Font.Name
On Error GoTo 0
Successivo rngChar
End If
Successivo oShp
End If
Case Else
'Do Nothing
End Select

SkipRange:
On Error GoTo 0
'Get next legata storia (se presente)
Set rngStory = rngStory.NextStoryRange
Loop Fino rngStory è niente
Successivo rngStory
'Ordina la collezione.
StatusBar = "Ordinamento Elenco font"
Set colFontsUsed = SortCollection (colFontsUsed)
StatusBar = ""
'Crea documento elenco dei caratteri.
Set oDocList = Documents.Add
Con oDocList.Range
.Text = "Ci sono" e colFontsUsed.Count & _
"Font utilizzati nel documento, come segue:" & vbCr & vbCr
Per lngIndex = 1 Per colFontsUsed.Count
.InsertAfter ColFontsUsed (lngIndex) & vbCr
Successivo lngIndex
End With
Set oDocList = Nothing
Exit Sub

Err_Handler:
Riprendi SkipRange
End Sub

Funzione Pubblica SortCollection (ByVal Ocol Come Collection) Come Collection
Dim arrIndex () As Long
LngCount Dim As Long
Dim i As Long
M Dim As Long
Dim oColSorted As New Collection

lngCount = oCol.Count
Se lngCount = 0 Then
Set SortCollection = Nuova Collezione
Exit Function
End If

'Allocare una matrice di indice.
ReDim arrIndex (0 Per lngCount - 1) As Long
'Riempire la matrice di indice.
Per i = 0 Per lngCount - 1
arrIndex (i) = i + 1
Next i

'Generare un mucchio ordinato
Per i = lngCount / 2 - 1 a 0 Fase -1
Heapify Ocol, arrIndex, i, lngCount
Next i

'Ordinare l'array index
Per m = lngCount Per 2 Step -1
Scambio arrIndex, 0, m - 1
Heapify Ocol, arrIndex, 0, m - 1
Il Prossimo
Per i = 0 Per lngCount - 1
oColSorted.Add oCol.Item (arrIndex (i))
Avanti 'riempire raccolta uscita
Set SortCollection = oColSorted
End Function

Private Sub heapify (Ocol Come Collection, arrIndexPasssed () As Long, _
lngIndex As Long, lngCount As Long)
LngMidCount Dim As Long
Dim i As Long
lngMidCount = lngCount / 2

Do While lngIndex <lngMidCount
i = 2 * lngIndex + 1
Se i + 1 = oCol.Item (arrIndexPasssed (i)) _
Allora Exit Do
Scambio arrIndexPasssed, lngIndex, i
lngIndex = i
Cappio
End Sub

Private Sub Exchange (Index () As Long, i As Long, j As Long)
Temp Dim As Long
Temp = Index (i)
Index (i) = N (j)
Index (j) = Temp
End Sub

WordTips è la vostra fonte per la formazione Microsoft Word conveniente. (Microsoft Word è il più popolare software di elaborazione testi del mondo.) Questa punta (1522) si applica a Microsoft Word 97, 2000, 2002, e 2003. È possibile trovare una versione di questo suggerimento per l'interfaccia a barra multifunzione di Word (Word 2007 e più tardi) qui: Creazione di un elenco font documento.