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 - 最大化第二个窗口的连接范围计数不正确的主要内容,如果未能解决你的问题,请参考以下文章