最新版Word中.docm文档宏创建失败及运行异常问题求助
问题描述
我用.docm格式的Word文档,已经设置好标题为IssueSeverity的内容控件下拉框,想通过VBA宏自动根据选择的选项设置背景颜色,但遇到了几个问题:
- 点开发选项卡的「Macros」按钮后,弹窗里的创建按钮是灰色的,没法直接创建宏。
- 通过「Visual Basic」按钮创建的宏,存到
Normal模板里没法运行;尝试选当前文档项目保存时还会弹出错误。 - 已经写好的VBA代码如下:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) With ContentControl.Range If ContentControl.Title = "IssueSeverity" Then Select Case .Text Case "CRITICAL" .Cells(1).Shading.BackgroundPatternColor = wdColorDarkRed Case "HIGH" .Cells(1).Shading.BackgroundPatternColor = wdColorRed Case "MEDIUM" .Cells(1).Shading.BackgroundPatternColor = wdColorOrange Case "LOW" .Cells(1).Shading.BackgroundPatternColor = wdColorGreen Case "INFO" .Cells(1).Shading.BackgroundPatternColor = wdColorBlue Case Else .Cells(1).Shading.BackgroundPatternColor = wdColorAutomatic End Select End If End With End Sub
请问在最新版Word里,需要怎么设置才能让这个宏正常工作?
解决步骤
1. 调整宏安全设置
打开Word,依次点击「文件」→「选项」→「信任中心」→「信任中心设置」→「宏设置」:
- 选择「启用所有宏」(测试环境用这个最便捷,正式环境可以选「启用数字签署的宏;所有其他宏都通知」)
- 勾选「信任对VBA工程对象模型的访问」
修改完成后点击确定,重启Word使设置生效。
2. 将代码保存到当前文档的正确位置
打开目标.docm文档,按下Alt+F11打开VBA编辑器:
- 在左侧「项目」窗口中找到当前文档的项目(名称格式为
Project(你的文档名.docm)),展开该项目 - 双击项目下的「ThisDocument」模块,将你的代码粘贴到右侧的代码编辑窗口中
- 按下
Ctrl+S保存文档,确保文档格式仍是.docm(若不是,选择「另存为」→「启用宏的Word文档」)
3. 修复代码中的潜在错误
原代码中使用.Cells(1)的前提是内容控件位于表格单元格内,若控件不在表格中会触发运行错误。可以修改为兼容两种场景的代码:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) If ContentControl.Title = "IssueSeverity" Then ' 判断内容控件是否位于表格单元格内 If ContentControl.Range.Information(wdWithInTable) Then Select Case ContentControl.Range.Text Case "CRITICAL" ContentControl.Range.Cells(1).Shading.BackgroundPatternColor = wdColorDarkRed Case "HIGH" ContentControl.Range.Cells(1).Shading.BackgroundPatternColor = wdColorRed Case "MEDIUM" ContentControl.Range.Cells(1).Shading.BackgroundPatternColor = wdColorOrange Case "LOW" ContentControl.Range.Cells(1).Shading.BackgroundPatternColor = wdColorGreen Case "INFO" ContentControl.Range.Cells(1).Shading.BackgroundPatternColor = wdColorBlue Case Else ContentControl.Range.Cells(1).Shading.BackgroundPatternColor = wdColorAutomatic End Select Else ' 若控件不在表格中,直接设置控件所在范围的底纹 Select Case ContentControl.Range.Text Case "CRITICAL" ContentControl.Range.Shading.BackgroundPatternColor = wdColorDarkRed Case "HIGH" ContentControl.Range.Shading.BackgroundPatternColor = wdColorRed Case "MEDIUM" ContentControl.Range.Shading.BackgroundPatternColor = wdColorOrange Case "LOW" ContentControl.Range.Shading.BackgroundPatternColor = wdColorGreen Case "INFO" ContentControl.Range.Shading.BackgroundPatternColor = wdColorBlue Case Else ContentControl.Range.Shading.BackgroundPatternColor = wdColorAutomatic End Select End If End If End Sub
4. 验证宏功能
回到Word文档,点击标题为IssueSeverity的内容控件下拉框,选择不同选项后点击文档其他区域退出控件,查看背景颜色是否按预期变化。
内容的提问来源于stack exchange,提问作者3therk1ll
相关产品推荐
相关产品推荐

