Sim*_*ris 2 excel vba excel-2007 excel-vba
这适用于.xls书籍,但也可以更改为.xlsx工作簿吗?还是它们的语法对两者都适用?
Option Explicit
Public Sub RefreshQueries()
Dim wks As Worksheet
Dim qt As QueryTable
For Each wks In Worksheets
For Each qt In wks.QueryTables
qt.Refresh BackgroundQuery:=False
Next qt
Next wks
Set qt = Nothing
Set wks = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑-所以看来我的语法确实刷新了.xlsx工作簿,但没有刷新来自sql server的查询。如何通过VBA刷新这些内容。
首先,没有宏将在.xlsx
工作簿中工作,因为.xlsx工作簿不能包含宏-您需要另存为具有扩展名的启用宏的工作簿.xlsm
。
在Excel 2007和更高版本中,用户创建的与SQL Server数据源(以及其他)的外部数据连接将不会导致QueryTables成员,而是会导致ListObject拥有一个可通过该ListObject.QueryTable
属性访问的QueryTable对象-请参阅Dick Kusleika的答案到了这个问题。以下代码应刷新两种类型的查询:
Option Explicit
Public Sub RefreshQueries()
Dim wks As Worksheet
Dim qt As QueryTable
Dim lo As ListObject
For Each wks In Worksheets
For Each qt In wks.QueryTables
qt.Refresh BackgroundQuery:=False
Next qt
For Each lo In wks.ListObjects
lo.QueryTable.Refresh BackgroundQuery:=False
Next lo
Next wks
Set qt = Nothing
Set wks = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
我以前并不熟悉该ListObject
类型,所以我不知道您是否可以ListObject
在没有的工作表上使用QueryTable
,这可能导致上述代码出错-您可能需要检查一下。