音调标志受数据(拼音)库制约,暂时未找到更好的。 WORD中的主要功能是进行文字处理,而我们的汉字是主要对象,进行汉字的注音功能,也是一个用途。 今天,终于完成一个较为满意的注音程序,它通过调用EXCEL程序(这样检查较WORD中快,也更方便),此程序较之一楼的速度要快。请各位进行测试。(请将代码部分粘贴于全局模板中(NORMAL.DOT THISDOCUMENT中) '请将此代码粘贴于全局模板中.
Sub GetPinYin()
Dim xlObj As Excel.Application, xlWb As Excel.Workbook, Hz As Range, HzRange As Excel.Range, c As Excel.Range, PY As String
Dim WordDoc As Document, Range1 As Range, AtdName As String, DefPath As String
On Error GoTo ErrHandle
Application.ScreenUpdating = False
AtdName = ActiveDocument.Name '取得活动本档名
DefPath = Options.DefaultFilePath(wdDocumentsPath) '取得默认WORD文件夹位置
Set WordDoc = Documents.Add '设置新文档
Documents(AtdName).Activate '返回活动文档
If Tasks.Exists("Microsoft Excel") = True Then '检查并建立EXCEL程序
Set xlObj = GetObject(, "Excel.Application")
Else
Set xlObj = CreateObject("Excel.Application")
End If
Set xlWb = xlObj.Workbooks.Open(DefPath & "\ExPinYin.xls") '打开该简体拼音工作薄
Set Myrange = xlWb.Sheets(1).Range("a1:a6763") '设置区域
For Each Hz In ActiveDocument.Characters '在活动文档中遍历每个字
With Myrange
Set c = Myrange.Find(Hz, LookIn:=xlValues)
If Not c Is Nothing Then
PY = c.Offset(, 1) '取得工作薄中的拼音
Hz.PhoneticGuide Text:=PY, FontSize:=10 '加注拼音指南,注意此时已变成域
ActiveDocument.Fields(1).Cut '剪切域
Else
Hz.Cut '剪切没有找到的文字
End If
End With
With WordDoc
Set Range1 = .Content '在新文档的最后粘贴剪贴板上的内容
Range1.Collapse Direction:=wdCollapseEnd
Range1.Paste
End With
Next
xlObj.Quit '关闭EXCEL程序
WordDoc.Activate
WordDoc.SaveAs FileName:="PinYin" & AtdName '保存新文档
MsgBox "自动拼音加注已完成!"
Application.ScreenUpdating = True
Exit Sub
ErrHandle:
MsgBox "请检查各文件位置或者活动文档的文本内容是否超过了32000个汉字"
End Sub
附件见楼下,请注意将EXCEL工作薄ExPinYin.XLS 保存于WORD文件的默认文件夹中! |