VBA使用SendKeys操控Word 2016打开旧版doc文件的参数咨询
问题背景
- 运行环境:64位 Windows 10
- 业务需求:共享盘数千个文件夹下存储有数万份旧格式.doc文档,需全部批量转换为.docx格式
- 权限限制:基于Word对象模型的自动化转换代码无法运行,原因是组织统一管控Trust Center(信任中心)的File Block Settings(文件阻止设置),Word 6.0、Word 95、Word 97、Word 2000格式文档被禁止通过对象模型接口打开,无修改该安全配置的权限。
- 操作约束:环境管控严格,禁止调用第三方程序、修改系统/Office安全设置,仅可使用Office原生能力实现需求,该需求为生产环境实际业务需求。
已实现代码与方案思路
经实测,虽无法通过VBA调用对象方法直接打开受限制的旧格式doc文件,但手动操作可正常打开,因此采用SendKeys模拟人工按键的方案实现自动化,流程为:启动空白Word实例→模拟按键打开目标doc文件→模拟按键将文件另存为docx格式。
目前已完成Word实例启动的VBA代码:
Dim objWordApplication as Word.Application Set objWordApplication = CreateObject("Word.Application") objWordApplication.Visible = True
注:原代码第三行变量名存在笔误,已修正为与声明一致的objWordApplication
具体问题
Word实例启动后,需要发送什么按键组合才能打开名为xyz.doc的文件?即如下代码中,占位符ABC对应的实际按键内容是什么?
objWordApplication.SendKeys ("ABCxyz", True)
答案
ABC对应的按键内容为^{F12},相关说明如下:
^{F12}是Word中直接调出传统「打开文件」对话框的原生快捷键,对应手动操作的「文件→打开→浏览」,不会触发对象模型调用的文件阻止限制,且在Word 2007及之后所有版本中均不会进入Backstage开始视图,对话框弹出后光标默认定位在文件名输入栏,可直接接收后续输入的文件名。- 如果使用环境为Word 2003/2002等更早版本,也可以用
^o(对应快捷键Ctrl+O)替代,效果一致,但Word 2013及以后版本中Ctrl+O默认进入Backstage视图,无法直接输入文件名,不推荐使用。 - 注意事项:
- 后续拼接的
xyz必须替换为目标doc文件的完整绝对路径(含盘符、共享盘路径、文件名、.doc后缀),Word打开对话框默认定位到用户文档目录,仅写文件名无法找到共享盘内的目标文件。 - 文件名输入完成后,需要额外发送回车确认(SendKeys中用
~表示回车)才能触发文件打开操作,完整可直接用的打开按键序列格式为^{F12}<文件完整绝对路径>~。 - 发送按键前需确保Word窗口处于前台激活状态,否则按键会被发送到其他当前活动程序,导致操作失败。
- 后续拼接的
内容的提问来源于stack exchange,提问作者Patronious
相关产品推荐
相关产品推荐

