我们正在使用 Office 2016 x86 和 Word 16.0.4405.1000 运行 W10 x64 LTSB。
我们正在使用自定义消息框,以便用户在在受保护视图中打开的文档中单击“启用编辑”时获得“确定/取消”对话框。该代码类似于您在 MSDN 中看到的代码: https ://msdn.microsoft.com/en-us/library/office/hh128817(v=office.14).aspx
如果用户选择取消,我们将“True”传递给 VBA 子“ProtectedViewWindowBeforeEdit(ByVal PvWindow As ProtectedViewWindow, Cancel As Boolean)”中的取消参数。
这会导致警告“Word 无法读取此文档”。这很好。
确认警告对话框后,Word 崩溃并显示“Word 已停止工作”。
事件查看器正在记录:#1000(应用程序错误)。故障模块:mso30win32client.dll
但是,我们在 Excel 2016(相同版本)中使用相同的代码,并且工作正常。
我读到 DisplayLink 驱动程序过去曾出现过导致此问题的问题。我们尝试禁用硬件加速并关闭 COM 加载项,但没有成功。
非常感谢任何帮助。
更新:如何重现:
使用 Word 2016 创建 DOTM 文件。
在 VBA 中创建一个模块并粘贴此代码:
Public appObject As New clsEvents Public Sub autoexec() Set appObject.WDApp = Word.Application End Sub
创建一个类模块,将其命名为 clsEvents 并粘贴以下代码:
Public WithEvents WDApp As Word.Application Private Sub WDApp_ProtectedViewWindowBeforeEdit(ByVal PvWindow As ProtectedViewWindow, Cancel As Boolean) Cancel = (MsgBox("Text", vbOKCancel, "Event") = vbCancel) End Sub
将 DOTM 文件放入 Word 启动位置(请参阅 Word 选项 --> 高级 --> 文件位置 --> 启动)。
在受保护的视图中打开文件(Word --> 文件 --> 打开 --> 浏览 --> 选择文件 --> 展开打开下拉列表 --> 在受保护的视图中打开)
单击 ProtectedView 栏中的“启用编辑”。
在 MsgBox 对话框中按“取消”并单击 OK 确认以下错误消息。
“Microsoft Word 已停止工作”