使用 VBA 刷新单个查询的最佳选择
Posted
技术标签:
【中文标题】使用 VBA 刷新单个查询的最佳选择【英文标题】:Best option to refresh a single query using VBA 【发布时间】:2020-05-05 07:26:44 【问题描述】:我有一个包含 4-6 个查询的工作簿,我只想用 VBA 刷新 6 个查询中的 1 个。我的问题是,我使用的是下面最快的选项吗?
不,我不想在 Excel 中使用“全部刷新”/“刷新”按钮,我需要将其包含在一个子项中。
代码:
ThisWorkbook.Connections("Query - Raw").OLEDBConnection.refresh
' THESE ALSO WORK
' ActiveWorkbook.RefreshAll
' Selection.ListObject.QueryTable.refresh BackgroundQuery:=False
这些不起作用:
ActiveWorkbook.Connections("Raw").refresh
ThisWorkbook.Connections("Raw").refresh
提前感谢您的友好回答。
【问题讨论】:
【参考方案1】:最快的应该是按名称刷新特定查询。
ThisWorkbook.Connections("YourOLEDBconnection").OLEDBConnection.refresh
这将是一个较小的调用堆栈,但不会太多/如果有任何明显的时间差异。它也只关心连接打开、刷新、关闭路径。
类似:
ThisWorkbook.Worksheets("SheetName").ListObjects("query table name").QueryTable.refresh BackgroundQuery:=False
我认为会有更长的调用堆栈对顶部显示的连接刷新进行额外调用。您也可能会产生与表格本身相关的少量开销(任何重新绘制的格式等)。
您可以对各种方法进行计时,并寻找最佳的中间刷新时间并采用该方法。
【讨论】:
与进入我需要刷新的工作表然后使用 VBA 代码运行 Selection.ListObject.QueryTable.refresh BackgroundQuery:=False 不同吗? ?我是说刷新表格会在后台刷新连接,所以只需刷新连接即可。 我的意思是 ThisWorkbook.Worksheets("SheetName").ListObjects("query table name").QueryTable.refresh BackgroundQuery:=False 与 Selection.ListObject.QueryTable.refresh BackgroundQuery:= 基本相同假的? 没有。第二个会产生更多的 i/o 开销,因为您必须先触摸工作表并选择目标。以上是关于使用 VBA 刷新单个查询的最佳选择的主要内容,如果未能解决你的问题,请参考以下文章
使用 Access VBA,如何计算选择查询中的输出记录数并将计数存储为 VBA 变量?
Excel VBA - 将多个用户表单复选框值写入单个单元格