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

Posted

技术标签:

【中文标题】VBA - 最大化第二个窗口的连接范围计数不正确【英文标题】:VBA - Connection Range Count Incorrect With Second Window Maximized 【发布时间】:2019-04-03 20:13:07 【问题描述】:

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

将以下方法放在“BeforeClose”方法中:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    'ThisWorkbook.connections(1).Ranges.count

End Sub

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

1

正如我们所期望的那样,因为我们有一个连接,一个数据透视表,相当简单。现在重复同样的步骤,但是当你关闭文件时,首先打开一个空白的excel文件,当它最小化时关闭主文件:

现在你得到:

0

现在,这怎么可能?这不是我对how this property works 的理解。我认为“ThisWorkbook”是:

“ThisWorkbook 属性更容易理解,因为它简单 引用执行 VBA 代码的 Excel 工作簿。”

我在这里做错了什么?找到“连接”,但当第二个文件处于活动状态时,范围属性似乎不正确。我的初衷是determine where the connection was being used。也许我的方法不对?

更新 1

哎呀,对于与 MsgBox 的所有混淆感到抱歉,似乎(在我之前的问题版本中)MsgBox 正在使窗口再次处于活动状态并显示 1 而不是代码中存在的值。但是,如果您在该行上放置一个断点,您将在窗口激活之前看到问题:

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

我已使用此说明更新了原始问题,并删除了令人困惑的 MsgBox 问题。谢谢大家的好收获。

【问题讨论】:

哪个操作系统 + Excel 版本?无法在 W7+Excel 2016 64 位上重现。 ThisWorkbook 确实是指包含代码的工作簿,并且在打开第二个文件的最小化场景中,MsgBox 给了我1 Windows 7 - 32 位 - Office 365 版本 1808 我无法在 Excel2016 或 2013 上重现该问题。我的结果与 @RikSportel 相同 对不起,是的,重现问题的原始方法不正确,显然“MsgBox”将其丢弃。你们可以在调试时尝试复制它吗?希望其他人能看到这一点,我已经在多个系统上看到过(虽然都是 32 位)。 更多大陆重现问题的方法是使用Workbook_WindowDeactivate 方法(使用msgbox .or Debug.Print)。它会在新书打开或只是切换窗口时出现。与您的其他特色问题相关,我认为它仅适用于 OLAP Cube。我无法通过其他连接重现该错误。 【参考方案1】:

我重现了您的问题。我们可以使用

来证明它正在查看正确的对象
Debug.Print ThisWorkbook.Connections(1).Parent.Name
Debug.Print ThisWorkbook.Connections(1).Name

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

您还可以在 MS 论坛中发起一个关于该问题的主题,该问题可以上报给开发人员: https://answers.microsoft.com/en-us

【讨论】:

很好的建议,I've cross posted here。 酷,我给了它一个 +1

以上是关于VBA - 最大化第二个窗口的连接范围计数不正确的主要内容,如果未能解决你的问题,请参考以下文章

Excel/ADO/VBA:计数返回不正确的结果

计数和复制动态范围Vba

访问最大功能:返回10个字段中的第二个最高值

SwiftUI 滑块值不尊重范围

PyQt5 - 第二个窗口中的按钮在单击时不执行操作

每个范围的 VBA Numberformat 不同