作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如标题所述:我发现单击功能区上的“全部刷新”按钮不会触发 QueryTable 的 BeforeRefresh 事件。为什么会这样?有没有办法改变这种行为?
奇怪的是,同一个QueryTable的AfterRefresh事件被完美触发了!
为了分析这种行为,我在两个工作表中创建了两个表:
Source
的简单未链接表Destination
链接到 Source
table 。连接是使用 Microsoft Query 和 Excel 文件作为数据源创建的。 TestClass
如下:
Option Explicit
Private WithEvents qt As QueryTable
Public Sub Init(pQt As QueryTable)
Set qt = pQt
End Sub
Private Sub qt_BeforeRefresh(Cancel As Boolean)
MsgBox "BeforeRefresh"
End Sub
Private Sub qt_AfterRefresh(ByVal Success As Boolean)
MsgBox "AfterRefresh"
End Sub
TestClass
的实例。 .
Destination
表并选择“刷新”会得到预期的结果:MsgBox 显示两次,确认刷新前和刷新后事件均已触发。
TestClass
正在创建和初始化实例。
ThisWorkbook
的相关部分目的:
Option Explicit
Private Destination As New TestClass
Private Sub Workbook_Open()
Destination.Init WS_Destination.ListObjects("Destination").QueryTable
End Sub
WS_Destination
是
(Name)
的值包含
Destination
的工作表的属性 table 。
Destination
是私有(private)字段,但是垃圾回收器好像不在乎:我可以右键刷新
Destination
表任意多次,并且之前和之后的 MsgBoxes 总是弹出。然而, Refresh All 永远不会(甚至一次)触发 BeforeRefresh 事件,但总是触发 AfterRefresh 事件。
最佳答案
Option Explicit
Public tc as TestClass
Sub Test()
Set tc = New TestClass
tc.Init Worksheets("SomeSheet").ListObjects(1).QueryTable
End Sub
Option Explicit
Public tc as TestClass
Sub Test()
Set tc = New TestClass
tc.Init Worksheets("SomeSheet").ListObjects(1).QueryTable
Worksheets("SomeSheet").ListObjects(1).QueryTable.Refresh
End Sub
关于vba - 全部刷新没有触发 QueryTable 的 BeforeRefresh 事件 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531126/
如标题所述:我发现单击功能区上的“全部刷新”按钮不会触发 QueryTable 的 BeforeRefresh 事件。为什么会这样?有没有办法改变这种行为? 奇怪的是,同一个QueryTable的Af
我是一名优秀的程序员,十分优秀!