更新:
在总结和讨论了所有细节之后,我花了 2 个小时检查选项,这次更新是 dot all i
s.
准备工作
首先,我在由 VMWare 提供支持的 Clean Win7 SP1 Ultimate x64 虚拟机上执行了干净的 Office 2010 x86 安装(这是我日常测试任务的常规程序,因此我部署了许多)。
然后,我只更改了以下 Excel 选项(即所有其他选项在安装后保持不变):
Advanced > General > Ask to update automatic links
检查:
Trust Center > Trust Center Settings... > External Content > Enable All...
(尽管与数据连接相关的那个对于这种情况很可能并不重要):
前提条件
C:\
我完全按照@Siddharth Rout
他更新的答案中的建议准备并放入工作簿(为方便起见共享): https ://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx 然后删除链接的书,以便共享中的链接书不可用(肯定)。
手动开启
上面的共享文件在打开时显示(具有上面列出的 Excel 选项)2 个警告 - 按出现顺序:
警告 #1
单击后,Update
我预计会得到另一个:
警告 #2
所以,我想我的测试环境现在非常类似于OP
's) 到目前为止一切顺利,我们终于去
VBA 开幕
现在我将逐步尝试所有可能的选项以使图片清晰。为简单起见,我将仅共享相关的代码行(最后将共享带有代码的完整示例文件)。
1.简单的Application.Workbooks.Open
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
毫不奇怪 - 这会产生两个警告,就像上面的手动打开一样。
2. Application.DisplayAlerts = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
此代码以WARNING #1结尾,并且单击的任一选项 ( Update
/ Don't Update
) 都不会产生进一步的警告,即Application.DisplayAlerts = False
抑制WARNING #2。
3. Application.AskToUpdateLinks = False
Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True
与 相反DisplayAlerts
,此代码仅以WARNING #2结束,即Application.AskToUpdateLinks = False
抑制WARNING #1。
4.双重错误
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
显然,这段代码最终会抑制BOTH WARNINGS。
5.更新链接:=假
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False
最后,这个 1 行解决方案(最初由 提出@brettdj
)的工作方式与 Double False:NO WARNINGS显示相同!
结论
除了良好的测试实践和非常重要的已解决案例(我可能每天在将工作簿发送给第 3 方时都会遇到此类问题,现在我准备好了),还学到了 2 件事:
- 无论版本如何,Excel 选项都很重要——尤其是当我们谈到 VBA 解决方案时。
- 每一个问题都有简短而优雅的解决方案 - 以及不明显和复杂的解决方案。再证明一个!)
非常感谢为解决方案做出贡献的每个人,尤其是提出问题的 OP。希望我的调查和详尽描述的测试步骤不仅对我有帮助)
以上代码示例的示例文件共享(多行特意注释):https ://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
原始答案(使用某些选项针对Excel 2007进行了测试):
这段代码对我来说很好 - 它循环遍历使用通配符指定的所有 Excel 文件InputFolder
:
Sub WorkbookOpening2007()
Dim InputFolder As String
Dim LoopFileNameExt As String
InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!
LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""
Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True
LoopFileNameExt = Dir
Loop
End Sub
我尝试使用外部链接不可用的书籍 - 没有警告。
示例文件:https ://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm