首页 > 解决方案 > 功能区 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 打开文档(通过简单的双击)?我确定我在这里遗漏了一些东西,但是我很难在网上找到有关此的任何信息。

标签: vbams-wordribbonx

解决方案


与前面的答案类似,但可能更简单的是将 autoopen 和 autonew 过程添加到您的代码中,并在这些过程而不是 onload 过程中捕获活动文档。


推荐阅读