介绍。我有一个本地网站,其中一个页面用于多个用户在他们的 PC 上下载 Excel 报告。该文件是通过 Oracle Business Intelligence Publisher (OBIP) 使用我们数据库中的一些数据自动生成的,因此该文件具有旧的 MS Excel 97-2003.xls
格式。但是,我们使用 Office 2019 及其较新的 Excel 版本来打开.xls
文件。
问题发生。该文件包含 VBA 宏,它只运行一次,并根据不同工作表中的某些单元格值执行多项操作。不幸的是,Excel 产品hide
允许autofit
受保护的视图默认情况下,因此当新用户打开任何报告时,他都会面临两个问题:
- 按下“启用”按钮之前,功能中的命令
Workbook_Open
不起作用(这会导致下一个问题) - 启用编辑后出现错误:
Application-defined or object-defined error
。
调试此错误时,它停在以下行:If [MyNamedcell] = "1" Then
。
失败的尝试。正如我所见,这意味着在用户启用编辑和 VBA 运行后,此刻没有定义的名称。这就是为什么我尝试使用此脚本在宏中启用编辑的原因:
If Application.ProtectedViewWindows.Count > 0 Then
For Each ProtectedViewWindow In Application.ProtectedViewWindows
ProtectedViewWindow.Activate
Set Workbook = ProtectedViewWindow.Edit()
Next ProtectedViewWindow
End If
但它让我編輯錯誤打开文件时:Editing has been blocked for this file
。
调试此错误时,它会停在以下行:Set Workbook = ProtectedViewWindow.Edit()
。
我在网上找不到与此类似的错误!
问题如何在启用编辑后防止用户看到错误并成功完成所有宏操作受保护的视图消息栏我
应该注意到:
- 启用所有宏选项在某种程度上已经在每个用户的 Excel 中打开。
- 解决我的问题的另一种方法是禁用所有受保护的视图中的选项信任中心在处理我的报告之前,但它可能不是 100% 安全,因为宏中存在问题,另一个新用户可能会错过有关禁用选项的信息并再次面临问题。
谢谢你!
答案1
我不确定是否能立即解决这个问题,但可以考虑一些解决方法,
禁用受保护的视图。正如你提到的,禁用所有受保护的视图信任中心中的选项可能不是理想的解决方案,但您可以向用户提供明确的说明,说明如何针对特定报告暂时禁用它。或者,考虑将下载文件的文件扩展名从 .xls 更改为 .xlsm,这是带有宏的 Excel 文件的格式。但是,这可能不是理想的选择。
处理‘Workbook_Open’私下里即检查文件是否在受保护的视图和出口如果是,则执行宏。这样,宏将不会运行,直到用户启用编辑,从而避免错误。例如,
Private Sub Workbook_Open()
If Application.ProtectedViewWindows.Count > 0 Then
Exit Sub
End If
' Continue with the rest of VB
End Sub
希望它能有点帮助。
答案2
如果有人Editing has been blocked for this file
在宏开始处理时收到一条消息:这种错误的原因可能是您打开文件的方式,因此请尝试其他打开方式。 就
我而言,当我使用.xls
Excel 用户界面在受保护的视图中重现我的用户遇到的错误(我无法通过启用所有受保护的视图选项来重现它):
Excel 主页 → 打开 → 文件夹 → 使用受保护的视图打开