VBA - 连接范围计数不正确,第二个窗口最大化

Dav*_*ers 9 excel vba pivot-table excel-vba

获取一个带有数据透视表和一些数据/过滤器的文件:

在此输入图像描述

将以下方法放在"BeforeClose"方法中:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    'ThisWorkbook.connections(1).Ranges.count

End Sub
Run Code Online (Sandbox Code Playgroud)

现在,如果您关闭此文件(并设置断点),您会注意到注释掉的语句具有以下值:

1

这就像我们所期望的那样,因为我们有一个连接,一个数据透视表,相当直接.现在重复相同的步骤,但是当您关闭文件时,首先打开一个空白的Excel文件,并在最小化时关闭主文件:

在此输入图像描述

现在你得到:

0

现在,这怎么可能?这不是我对这个属性如何工作的理解.我以为"ThisWorkbook"是:

"ThisWorkbook属性更容易理解,因为它只是引用了正在执行VBA代码的Excel工作簿."

我在这里弄错了什么?找到"连接"但是当第二个文件处于活动状态时,范围属性似乎不正确.我最初的意图是确定连接的使用位置.也许我会以错误的方式去做?

更新1

哎呀,对于与MsgBox的所有混淆感到遗憾,似乎(在我之前的问题中),MsgBox再次激活窗口并显示1而不是代码中存在的值.但是,如果您在该行上设置了一个断点,您将在窗口变为活动状态之前看到该问题:

在此输入图像描述

所以这个问题仍然存在,我很难以一种容易看到的方式重现这个问题(并且在堆栈溢出时可以传播).也许潜在的解决方法是在关闭之前使当前窗口成为活动窗口.我仍然想了解这种奇怪行为的根本原因.

我已经用这个澄清更新了原始问题,并删除了令人困惑的MsgBox问题.谢谢大家的好收获.

Hac*_*ash 4

我重现了你的问题。我们可以通过使用来证明它正在查看正确的对象

Debug.Print ThisWorkbook.Connections(1).Parent.Name
Debug.Print ThisWorkbook.Connections(1).Name
Run Code Online (Sandbox Code Playgroud)

然而,当最小化时,计数将变为零。这看起来像一个错误。向微软报告。您可以点击File > Feedback然后寻找皱眉脸来提交反馈。

您还可以在 MS 论坛中发起有关该问题的主题,可以将问题升级给开发人员: https://answers.microsoft.com/en-us