vba中的QueryTable对象具有两个事件,分别是AfterRefresh(刷新后)、BeforeRefresh(刷新前)两个事件。
它们的语法分别如下:
Private Sub oQT_AfterRefresh(ByVal Success As Boolean) End Sub
Private Sub oQT_BeforeRefresh(Cancel As Boolean) End Sub
其中AfterRefresh事件可以在刷新完成后触发,BeforeRefresh事件在刷新前触发。
Success参数表示刷新是否成功,Cancel参数设置是否取消刷新。
如果要在vba中使用QueryTable对象的事件,需要按照以下步骤:
- 插入一个类模块,这里将类模块重命名为”clsQueryTable”,复制粘贴以下代码:
Public WithEvents oQT As QueryTable Private Sub oQT_AfterRefresh(ByVal Success As Boolean) If Success Then '开始写刷新成功后的代码 MsgBox "这是个示例" Else '刷新未完成的代码 End If End Sub Private Sub oQT_BeforeRefresh(Cancel As Boolean) '开始写刷新前的代码 End Sub
- 插入一个标准模块,复制粘贴以下代码:
'这里要特别注意*********,一定要声明为全局的变量,才能使用类模块的事件********* Dim objCls As New clsQueryTable Sub QQ1722187970() Dim oQB As QueryTable Dim oWK As Worksheet Set oWK = Excel.ActiveSheet Dim sUrl As String sUrl = "URL;http://www.mca.gov.cn/article/sj/tjbz/a/2018/201803131439.html" With oWK '如果没有查询表,则新建一个 If .QueryTables.Count = 0 Then Set oQB = oWK.QueryTables.Add(sUrl, oWK.Range("a1")) Else '如果有,则把第一个查询表改为网页查询 Set oQB = oWK.QueryTables(1) With oQB .Connection = "URL;http://www.mca.gov.cn/article/sj/tjbz/a/2018/201803131439.html" End With End If End With '*********关联类模块中的具有事件的oQT变量,这里是关键********* Set objCls.oQT = oQB With oQB '指定只导入指定的表格 .WebSelectionType = xlSpecifiedTables '要导入的表格序号 .WebTables = 1 '设置刷新的频率,以分钟为单位,如果设置为0,表示不定时更新 .RefreshPeriod = 1 '开始刷新 .Refresh End With End Sub
经过以上两个步骤既可以使用QueryTable对象的AfterRefresh事件和BeforeRefresh事件。
发表评论