gpt4 book ai didi

vba - 如何检查连接刷新是否成功

转载 作者:行者123 更新时间:2023-12-03 15:37:25 25 4
gpt4 key购买 nike

在 Excel 2016 VBA 中,我正在刷新几个这样的查询:

MyWorkbook.Connections(MyConnectionName).Refresh

代码完成后,没有遇到任何错误,我看到大多数查询的沙漏图标仍在旋转几秒钟。

是否可以在所有刷新完成后检查是否成功?我担心我的代码不会知道在代码完成之后但在查询完成刷新之前是否发生错误。

顺便说一句,我不想​​执行 RefreshAll,因为某些查询依赖于其他查询(将它们用作源)。我以一定的顺序刷新它们,以便在它们依赖的查询之后刷新依赖的查询。

更新:

我看到 Connection 对象有一个只读的 RefreshDate 属性,乍一看似乎可以用来做这个检查:
MyWorkbook.Connections(MyConnectionName).OLEDBConnection.RefreshDate

但是,它似乎没有被设置。我在尝试检查时遇到错误。如果我将 Variant 变量设置为 RefreshDate 属性,则该变量显示为“空”。源是 SQL 服务器数据库。

最佳答案

QueryTable对象公开两个事件:BeforeRefreshAfterRefresh .

您需要将您的范式从程序/命令式更改为事件驱动。

假设您在 ThisWorkbook 中有此代码(在标准程序代码模块中不起作用,因为 WithEvents 只能在一个类中):

Option Explicit
Private WithEvents table As Excel.QueryTable
Private currentIndex As Long
Private tables As Variant

Private Sub table_AfterRefresh(ByVal Success As Boolean)
Debug.Print table.WorkbookConnection.Name & " refreshed. (success: " & Success & ")"
currentIndex = currentIndex + 1
If Success And currentIndex <= UBound(tables) Then
Set table = tables(currentIndex)
table.Refresh
End If
End Sub

Public Sub Test()
tables = Array(Sheet1.ListObjects(1).QueryTable, Sheet2.ListObjects(1).QueryTable)
currentIndex = 0
Set table = tables(currentIndex)
table.Refresh
End Sub
tables变量包含 QueryTable 的数组对象,按您希望刷新的顺序排列; currentIndex变量指向该数组中的索引,对于 QueryTable你想采取行动。

所以当 Test运行,我们初始化 tables带有 QueryTable 的数组我们要刷新的对象,按照我们要刷新它们的顺序。

隐式的、事件驱动的循环在 table.Refresh 时开始。被调用并且 QueryTable触发其 AfterRefresh事件:然后我们报告成功,并更新事件提供者 table下一个 QueryTable 的对象引用在数组中(仅当刷新成功时),并调用它的 Refresh方法,将触发 AfterRefresh再次,直到整个数组被遍历或其中一个未能更新。

关于vba - 如何检查连接刷新是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43548543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com