vba - 功能区 onLoad 子中的 ActiveDocument 错误 4248
问题描述
我有一个带有自定义功能区的全局模板。当我尝试打开一个文档时,我收到错误 4248,它声称该命令无法运行,因为没有打开任何文档。
onLoad 子程序中的代码正在检查以确保活动文档不是模板或 Normal.dotm,因为我不希望通过调用的过程将文档变量写入这些文件。这在 Word 2013 中运行良好,但我注意到在 Word 2016 中,功能区 onLoad 过程似乎在 Word 中的文档打开之前运行。我已将问题定位到 ActiveDocument.Name 行,在那里我可以捕获错误并继续下一步,但这并不能帮助我在确定这不是全局模板文档或 Normal 后运行附加代码.dotm。
Public myRibbonNewNormal As IRibbonUI
Public bVisible As Boolean
Dim bDocSaved As Boolean
Sub onLoad_newNormal(ribbon As IRibbonUI)
Set myRibbonNewNormal = ribbon
On Error GoTo onLoadError
If ActiveDocument.Name = "Styles.dotm" Or ActiveDocument.Name =
"newNormal.dotm" Then
Exit Sub
ElseIf ActiveDocument.ReadOnly Then
Exit Sub
Else
'Call checkDocType
Call uncheckUpdateStyles
Call removeClientFooter
Call checkTemplate
If bDocSaved <> True Then
Call preventSave
Else
'do nothing
End If
End If
Exit Sub
onLoadError:
If Err.Number = 0 Then
Resume Next
ElseIf Err.Number = 5 Then
Resume Next
ElseIf Err.Number = 5825 Then
Resume Next
ElseIf Err.Number = 5903 Then
Resume Next
'ElseIf Err.Number = 5155 Then
' Resume Next
ElseIf Err.Number = 4248 Then
Resume Next
Else
MsgBox "This error is in the onLoad sub in the newNormal RibbonControl" _
& vbCrLf & vbCfLf & "Error: " & Err.Number & vbCrLf & Err.Description, ,
"Error"
End If
End Sub
(请原谅我的错误处理。当我写这段代码时我很着急,只是还没有回来做正确的事情。)
有没有办法让我等待执行 onLoad 子程序,直到 Word 打开文档(通过简单的双击)?我确定我在这里遗漏了一些东西,但是我很难在网上找到有关此的任何信息。
解决方案
与前面的答案类似,但可能更简单的是将 autoopen 和 autonew 过程添加到您的代码中,并在这些过程而不是 onload 过程中捕获活动文档。
推荐阅读
- laravel - 为什么 Laravel Vapor 不在我的构建步骤中注入 ASSET_URL?
- admob - 修改广告代码调整广告框架大小下的 Admob 政策违规
- python - 如何在 tf.keras 中屏蔽 lstm 的输入
- javascript - 从具有不同键的数组中按值删除项目
- javascript - 在 findByIdAndDelete 上处理 NodeJS DELETE 端点中的捕获
- swift - 翻转时UIView翻转不起作用
- php - PHP从Android studio volley Get请求接收JSON对象
- javascript - HTML5 Canvas 绘制一堆可调整大小图形的最佳方式
- kubernetes - 在 Prometheus 中解析 JSON rest api 响应
- prism - 在对话框视图模型中取消打开对话框