excel - 以编程方式打开工作簿时可以跳过文件验证吗?

标签 excel vba validation

我有一个大约 100MB 大的 Excel 文件,我使用以下代码打开该文件,按下用户窗体按钮时运行该代码:

Public Sub SelectButton_Click()
    fNameAndPath = Application.GetOpenFilename(Title:="Please Select a Report")
    If fNameAndPath = False Then Exit Sub
End Sub

由于此文件太大,因此在打开之前需要一段时间进行验证,并且此验证大约占我整个宏完成所需时间的一半(我正在使用 Excel 2013,并且此文件不是从网络或共享驱动器)。如果我手动打开文件,则我可以选择在验证三秒后跳过验证。问题是它在 protected View 中打开文件,我无法在其中使用它。

使用 VBA,有没有办法“强制跳过”这种耗时的验证,同时避免 protected View ?

当 Excel 完全关闭时,此警告/指南将出现在打开的启动屏幕的左下角:

enter image description here


当 Excel 已打开时,此警告/指南将显示在右下角:

enter image description here

最佳答案

由于上面的评论,到目前为止,我发现有两种解决方案对于解决此问题很有用:

1。在 Windows 注册表设置中禁用 Excel 文件的 Office 验证:

我更喜欢使用早期绑定(bind),因此我建议在 VBA 编辑器窗口中打开“工具”窗口,选择“引用...”,然后选中“Windows 脚本宿主对象模型”旁边的框,然后单击好的。这将在您编写 VBA 时启用 IntelliSense:

Dim wsh As New WshShell
wsh.RegWrite "HKCU\Software\Microsoft\Office\15.0\Excel\Security\FileValidate\DisableEditFromPV", 0, "REG_DWORD"
Set wsh = Nothing

这适用于 Excel 2013。如果您有不同版本的 Office 或 Excel,您将在文件路径中使用 15.0 以外的其他内容。

但是,此方法存在一个明显的问题,即删除计算机上任何 Excel 文件的验证,即使是那些可能包含恶意代码或可能从危险位置(例如 Temp 或 Downloads 文件夹)运行的文件。

此外,根据您当前的环境或权限,可能会禁止写入 Windows 注册表。因此,我推荐一个不同的解决方案:

2。将 Excel 文件的位置设置为 Microsoft Excel 中的受信任位置:

  1. 可以通过 VBA 在注册表中设置新的受信任位置,但由于此方法是供无法访问注册表的用户使用的,因此我们不会详细介绍。

    要将文件位置(假设是 C:\中的“Excel Files”文件夹)添加为受信任位置,请先单击"file"选项卡,然后单击"file"菜单底部的“选项”:

    Selecting Options on the Excel File Menu

  2. 在打开的 Excel 选项窗口中,单击侧面菜单底部的“信任中心”,然后单击右侧出现的信任中心设置按钮:

    enter image description here

  3. 最后,单击添加新位置...选项并输入C:\Excel Files\(或任何文件夹位置;您甚至可以浏览到它),然后单击确定。如果需要,您还可以选中包含子文件夹的选项。

    enter image description here

关于excel - 以编程方式打开工作簿时可以跳过文件验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027919/

相关文章:

excel - 为什么 vlookup 宏部分工作?

jQuery 验证插件 : Element with Error has same CSS attributes as my Wrapper Target

ms-access - 将参数传递给 vba 函数时收到错误消息 : "Argument not optional (Error 449)"

regex - Django 管理员验证

javascript - 当我似乎无法重现它时,如何调试此验证错误?

vba - 使用VBA查找起始值,计算行数直到该值变为0并记录结果。对同一列重复此操作,直到到达数据末尾

vba - 在 Excel VBA 代码中使用 Excel 公式函数(ERF、ERFC)?

Excel:当VLOOKUP没有匹配项时,如何将单元格留空(而不是0)?

excel - 返回值 '1' 引用的单元格为空

ajax - 使用 XMLHttpRequest 的 VBA 代码总是返回 #VALUE!在 Excel 中