我决定为此贴加上精华,楼主付出了很大的心血,并且在对VBA还不太了解的情况下,手动做成的,其精神可嘉,其义深远。
在楼主发送于守柔的短消息中,我深深被这份追求所感动。我把我能实现的想法说一下,供楼主参考,注意,这只是个半成品,不能算是自动的,很遣憾,我目前也无法成功自动取得对所有命令的中文说明,尤其是WORD2003及其以后版本。其中,我尽管对英文版进行了测试调用对话框中各参数的操作,也未能如愿以偿。以下代码运行之间请注意:
运行LISTCOMMANDS命令,将所有命令打印文档表格中,表格转换为文字,将命令中的所有空格替换掉。
以下一段小程序,是遍历段落中,提取段落中的WORD命令所在位置,然后调用自定义键盘对话框,注意,请核对自定义对话框中的命令是否与所在段落命令一致,如果不一定,需手动选择(这种情况很多),如果首次出现对话框时不是“所有命令”类,请手动选择该类,以后会自动记忆为该类。
出现并确认命令一致后,按下ALT+PRINTSCREENSYSRQ组合键,截屏。单击关闭命令,关闭对话框,全手动。
关闭后,WORD将自动粘贴该对话框,手动录入中文说明。
第二次运行该代码(请自定义该命令到快捷键或工具栏),自动删除第一次的图片。重复上述操作。
如果不能正确运行,请修改"ME"关键字为“Activedocument”或“Thisdocument”。
Sub Example() Dim myDialog As Dialog, i As Paragraph, p As Long Dim myRange As Range '取得自定义对话框图像(临时解决命令的中文说明) On Error Resume Next '忽略错误 Me.InlineShapes(1).Delete '删除嵌入式图片 Set myDialog = Word.Dialogs(wdDialogToolsCustomizeKeyboard) '定义一个自定义键盘对话框对象 For Each i In Me.Paragraphs '在当前文档段落中循环 Set myRange = i.Range '定义一个RANGE对象 p = VBA.InStr(myRange, vbTab) '取得制表位位置 myRange.SetRange myRange.Start + p, myRange.End - 1 '重新定义一个RANGE对象 If VBA.InStr(myRange, "△") = 0 Then '如果该RANGE对象中没有"△"标记,说明没有"中文说明" If myRange Like "[a-zA-Z]*" Then '前面是命令,已去除空格 VBA.SendKeys "{TAB}", False '发送TAB键 VBA.SendKeys myRange.Text, False '向对话框发送命令名称,不一定正确,很多情况会不正确,可能是因为发送字符太多太快 If myDialog.Show = 0 Then '此时需要手动按下"ALT+PRINTSCREENSYSRQ"组合键,即手动截屏,然后手动关闭该自定义对话框 myRange.InsertAfter "△" '插入标志 myRange.SetRange myRange.End, myRange.End myRange.Paste '粘贴截屏对话框 myRange.SetRange myRange.End, myRange.End myRange.Select '设置为光标位置,此时手动键入中文说明(来自图中),下一次运行此代码时,自动此删除图片 Exit Sub End If End If End If Next End Sub |