如何禁止更新链接警告?

11 浏览
0 Comments

如何禁止更新链接警告?

我正在尝试编写一个脚本来打开许多Excel文件。我一直收到如下提示:

This workbook contains links to other data sources.

我想使这条消息不再出现,这样我的脚本可以自动运行,而不必为每个工作簿点击Don\'t Update。目前我正在使用以下代码:

function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function

但是,消息仍在出现。我该怎么解决?

编辑:似乎这条消息出现在具有损坏链接的工作簿中。我没有看到This workbook contains one or more links that cannot be updated消息,因为我将DisplayAlerts设置为false。这些工作簿链接到我们Windows服务器上的一个文件夹中的等效文件,因此当该文件夹中的匹配文件被删除(这是我们业务流程的一部分)时,链接将中断。当链接中断时,是否可能抑制警告?

此外,我正在使用Excel 2010。

admin 更改状态以发布 2023年5月24日
0
0 Comments

打开Excel的VBA编辑器,然后在即时窗口中键入以下内容(见屏幕截图)

Application.AskToUpdateLinks = False 

关闭Excel,然后打开您的文件。它将不再提示您。记得在关闭工作簿时重置它,否则它也无法适用于其他工作簿。

屏幕截图:

enter image description here

编辑

因此,将其应用于您的代码,您的代码将如下所示:

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

跟进

Sigil,下面的代码也适用于具有损坏链接的文件。以下是我的测试代码。

测试条件

  1. 创建2个新文件。将它们命名为Sample1.xlsxSample2.xlsx,并将它们保存在C:\
  2. Sample1.xlsx的单元格A1中,键入以下公式='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. 保存并关闭两个文件
  4. 删除Sample2.xlsx!!!
  5. 打开一个新工作簿,然后将该代码粘贴到其模块中,运行Sample。您将注意到您将不会收到提示。

代码

Option Explicit
Sub Sample()
    getWorkbook "c:\Sample1.xlsx"
End Sub
Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

0
0 Comments

更新:

在总结和讨论了所有细节之后,我花了2个小时检查了选项,这个更新是为了展示每一个i

准备工作

首先,我在由VMWare提供支持的Clean Win7 SP1 Ultimate x64虚拟机上完成了Office 2010 x86的干净安装(这是我日常测试任务的常规程序,因此我已经部署了许多虚拟机)。

然后,我仅更改了以下Excel选项(即,所有其他选项在安装后均保持不变):

  • 高级 > 常规 > 询问是否更新自动链接 已勾选

询问是否更新自动链接

  • 信任中心 > 信任中心设置... > 外部内容 > 启用全部...(尽管与数据连接相关的选项可能并不重要):

外部内容

前提条件

我按照@Siddharth Rout在他更新的回答中的建议(为方便共享)准备了一本工作簿,并将其放置在C:\上:https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx。然后,删除了链接的工作簿,因此共享的工作簿中的链接不可用(确保这一点)。

手动打开

在打开上述共享文件时(具有上述列出的Excel选项),会显示两个警告消息,顺序如下:

警告 #1

此工作簿包含对其他数据源的链接

单击 更新 后,我预期会得到另一条警告:

警告 #2

此工作簿包含一个或多个无法更新的链接

因此,我认为我的测试环境现在与 OP 的情况非常相似)到目前为止一切顺利,我们终于进入了

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

这段代码最终会得到 警告#1,无论是单击更新还是不更新,都不会产生进一步的警告,即Application.DisplayAlerts = False 抑制了警告#2

3. Application.AskToUpdateLinks = False

Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True

DisplayAlerts相反,此代码最终仅得到 警告#2,即Application.AskToUpdateLinks = False 抑制了 警告#1

4. 双重假

Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True

显然,此代码最终会抑制 两个警告

5. UpdateLinks:=False

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False

最后,这个一行代码的解决方法(最初由@brettdj提出)与Double False的方式完全相同:没有警告显示!

结论

除了一个好的测试实践和非常重要的解决方案(当我把我的工作簿发送给第三方时,我可能每天都会遇到这样的问题,现在我准备好了),还学到了两个东西:

  1. Excel选项很重要,无论版本如何-特别是当我们涉及VBA解决方案时。
  2. 每个问题都有简短而优雅的解决方案-连同不明显和复杂的解决方案。这只是更多的证明!)

非常感谢所有为解决方案做出贡献的人,特别是提出问题的OP。希望我的调查和详细描述的测试步骤不仅对我有帮助)

上面的代码示例的样例文件是共享的(许多行是故意注释的):https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

原始答案(对于Excel 2007进行测试,具有某些选项):

这个代码对我来说很好用-它循环遍历了InputFolder中指定的所有Excel文件:

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

0