Ich habe eine Reihe von Dokumenten, die in der Prä-Unicode-Ära gemacht werden, und enthalten Transkriptionen verschiedener Sprachen, jeweils mit ihren eigenen Schriftarten. Ich habe ein Makro erstellt, das jedes Zeichen in einem Dokument durch ein anderes Zeichen (von mehreren alten Transkriptionsschriftarten in eine Unicode-Schriftart) ersetzt. (siehe unten stehenden Code des Makros für eine dieser Schriftarten)einige Zeichen verlieren Formatierung in VBA Makro andere nicht
Aus irgendeinem Grund behält das Makro die Formatierung (in meinem Fall meist kursiv) für einige Zeichen, nicht für andere. Dies hinterlässt viele Wörter, in denen einige Buchstaben kursiv sind und andere Buchstaben nicht, z.
al-Malik al-Mu ǧā versteckte hú T ba
Die Zeichen, die die Formatierung sind alle Zeichen mit diakritischen Zeichen zu verlieren, aber nicht alle Zeichen mit diakritischen Zeichen verlieren ihre Formatierung (zB die ḫ im Beispiel). Nicht alle Zeichen, die ihre Formatierung beibehalten, haben den gleichen Codepunkt in der ursprünglichen Schriftart wie in der Unicode-Schriftart (z. B. hat das ḫ im Beispiel die Unicode-Nummer U + 23 in der ursprünglichen Schriftart und U + 1E2B in der Unicode-Schriftart).
Haben Sie eine Idee, warum die Formatierung für einige Zeichen beibehalten wird und nicht für andere? Oder wie ich dieses Problem lösen könnte?
Alternativ ich ein anderes Makro dem Verfahren könnte hinzufügen, dass alle Wörter formatieren würde, die mindestens einen Buchstaben kursiv in Kursivschrift enthalten (aber, wie das zu tun, ist eine andere Frage: MS Word macro to correct partially formatted words).
Sub BatchReplaceAOTimes()
'Replace the font AO Times New Roman in the body and footnotes
'of the active document
Debug.Print "Replacing AO Times New Roman font"
Dim old_values(270) As String
Dim unicode_values(270) As Long
old_values(0) = &H30
old_values(1) = &H31
(...)
old_values(263) = &HFD
old_values(264) = &HDD
old_values(265) = &H178
old_values(266) = &HFF
old_values(267) = &H5A
old_values(268) = &H7A
old_values(269) = &H2C
old_values(270) = &H9
unicode_values(0) = &H30
unicode_values(1) = &H31
(...)
unicode_values(263) = &H2BE
unicode_values(264) = &H2BF
unicode_values(265) = &H1E6E
unicode_values(267) = &H5A
unicode_values(268) = &H7A
unicode_values(269) = &H2C
unicode_values(270) = &H9
Selection.HomeKey Unit:=wdStory
Dim ThisRng As Range
'do body text
Set ThisRng = ActiveDocument.StoryRanges(wdMainTextStory)
For i = 0 To 270
Debug.Print i
ThisRng.Find.ClearFormatting
ThisRng.Find.Replacement.ClearFormatting
With ThisRng.Find
.Font.Name = "AO Times New Roman"
.Text = ChrW(old_values(i))
.Replacement.Font.Name = "Arial Unicode MS"
.Replacement.Text = ChrW(unicode_values(i))
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
ThisRng.Find.Execute Replace:=wdReplaceAll
Next i
(...: do the same for the footnotes)
End Sub