在 VBA 中为 Word 中的希伯来语字符设置特定字体大小
Set specific font size for Hebrew characters in Word in VBA
我需要将这段为Word 2007 编写的代码修改为Word XP。我需要为文档中的希伯来文文本设置大小。它是中欧词汇与希伯来语的混合体。我需要的是更大尺寸的希伯来文文本。这只包含基本的希伯来语字符,没有元音。非希伯来字符可以是英语或捷克字符 (http://www.biega.com/special-char.html),希伯来字符是从 1488 到 1514。
但是我无法运行将代码发送到这里,因为我得到错误(范围?)对象不是selected。
Sub test()
'Options.DefaultHighlightColorIndex = wdNoHighlight
'Range.HighlightColorIndex = wdNoHighlight ' used for testing to clear Highlight
Dim r As Range, t As Double: t = Timer
Application.ScreenUpdating = False
For Each r In Range.Characters ' For Each r In Range.Words is somehow about 2 times slower than .Characters
checkRange r
Next
Application.ScreenUpdating = True
Debug.Print Timer - t; Range.Words.Count; Range.Characters.Count; Range.End ' " 3.15625 8801 20601 20601 "
End Sub
Sub checkRange(r As Range)
Dim b() As Byte, i As Long, a As Long
b = r.Text ' converts the string to byte array (2 or 4 bytes per character)
'Debug.Print "'" & r & "'"; r.LanguageID; r.LanguageIDFarEast; r.LanguageIDOther
For i = 1 To UBound(b) Step 2 ' 2 bytes per Unicode codepoint
If b(i) > 0 Then ' if AscW > 255
a = b(i): a = a * 256 + b(i - 1) ' AscW
Select Case a
Case &H1F00 To &H1FFF: r.HighlightColorIndex = wdBlue: Exit Sub ' Greek Extended
Case &H3040 To &H30FF: r.HighlightColorIndex = wdPink: Exit Sub ' Hiragana and Katakana
Case &H4E00 To 40959: r.HighlightColorIndex = wdGreen: Exit Sub ' CJK Unified Ideographs
Case 55296 To 56319: ' ignore leading High Surrogates ?
Case 56320 To 57343: ' ignore trailing Low Surrogates ?
Case Else: r.HighlightColorIndex = wdRed: Debug.Print Hex(a), r.End - r.Start ' other
End Select
End If
Next
End Sub
所以我只需要 select 大小并使其适用于 Word XP。有帮助吗?
注意事项:
整个文档和希伯来文字符是从左到右书写的(当我在在线键盘上输入希伯来文时,它们是 RTL,但在应对 Word 之后它们是 LTR。但这不是问题,因为我有 copied/pasted 它们正确显示希伯来语单词。所以它们实际上在 LTR 中。
错误是因为您没有指定要处理的对象范围。
For Each r In Range.Characters
需要符合
For Each r In Selection.Range.Characters
或
For Each r In ActiveDocument.Range.Characters
您可以通过查找 Range
的在线帮助来自己回答这个问题
注意:
一个字符一个字符地处理文档将是一个 非常 漫长的过程。如果您要处理的字符可以通过语言 ID 识别,则可以大大加快处理速度。
我需要将这段为Word 2007 编写的代码修改为Word XP。我需要为文档中的希伯来文文本设置大小。它是中欧词汇与希伯来语的混合体。我需要的是更大尺寸的希伯来文文本。这只包含基本的希伯来语字符,没有元音。非希伯来字符可以是英语或捷克字符 (http://www.biega.com/special-char.html),希伯来字符是从 1488 到 1514。
但是我无法运行将代码发送到这里
Sub test()
'Options.DefaultHighlightColorIndex = wdNoHighlight
'Range.HighlightColorIndex = wdNoHighlight ' used for testing to clear Highlight
Dim r As Range, t As Double: t = Timer
Application.ScreenUpdating = False
For Each r In Range.Characters ' For Each r In Range.Words is somehow about 2 times slower than .Characters
checkRange r
Next
Application.ScreenUpdating = True
Debug.Print Timer - t; Range.Words.Count; Range.Characters.Count; Range.End ' " 3.15625 8801 20601 20601 "
End Sub
Sub checkRange(r As Range)
Dim b() As Byte, i As Long, a As Long
b = r.Text ' converts the string to byte array (2 or 4 bytes per character)
'Debug.Print "'" & r & "'"; r.LanguageID; r.LanguageIDFarEast; r.LanguageIDOther
For i = 1 To UBound(b) Step 2 ' 2 bytes per Unicode codepoint
If b(i) > 0 Then ' if AscW > 255
a = b(i): a = a * 256 + b(i - 1) ' AscW
Select Case a
Case &H1F00 To &H1FFF: r.HighlightColorIndex = wdBlue: Exit Sub ' Greek Extended
Case &H3040 To &H30FF: r.HighlightColorIndex = wdPink: Exit Sub ' Hiragana and Katakana
Case &H4E00 To 40959: r.HighlightColorIndex = wdGreen: Exit Sub ' CJK Unified Ideographs
Case 55296 To 56319: ' ignore leading High Surrogates ?
Case 56320 To 57343: ' ignore trailing Low Surrogates ?
Case Else: r.HighlightColorIndex = wdRed: Debug.Print Hex(a), r.End - r.Start ' other
End Select
End If
Next
End Sub
所以我只需要 select 大小并使其适用于 Word XP。有帮助吗?
注意事项: 整个文档和希伯来文字符是从左到右书写的(当我在在线键盘上输入希伯来文时,它们是 RTL,但在应对 Word 之后它们是 LTR。但这不是问题,因为我有 copied/pasted 它们正确显示希伯来语单词。所以它们实际上在 LTR 中。
错误是因为您没有指定要处理的对象范围。
For Each r In Range.Characters
需要符合
For Each r In Selection.Range.Characters
或
For Each r In ActiveDocument.Range.Characters
您可以通过查找 Range
注意: 一个字符一个字符地处理文档将是一个 非常 漫长的过程。如果您要处理的字符可以通过语言 ID 识别,则可以大大加快处理速度。