我有5 Workbook connections
從MS Access數據庫的建立是查詢數據,我已經給了他們的名字qry_1
,qry_2
,...,qry_5
我已經選擇在表中列出這些查詢名稱叫qry_Table
在工作表:
Query Name
----------
qry_1
qry_4
qry_5
和我可以通過表圈(用.listObjects
)來獲取每個查詢的名稱作爲string
問題
我,但我似乎可以通過所有的查詢工作簿中並刷新所有這些,循環不能以確定如何僅選擇和刷新表中列出的查詢,即qry_1
,qry_4
和qry_5
。
我希望能夠set
查詢對象,以便我也可以定義.Connection
字符串。
這可能嗎?
注意
這裏的代碼顯示瞭如何獲得表qry_Table
dim wksControl As worksheet
dim objList As ListObject
set wksControl = worksheets("Control") 'the worksheet that contains 'qry_Table'
Set objList = wksControl.ListObjects("qry_Table")
With objList.ListColumns("Query Name").DataBodyRange
For i = 1 To .Rows.count
str = .Rows(i) 'query name to refresh
'***Required: Define the qry to refresh
Set qry = .QueryTable(str) '<~~ this code fails
'code to .Refresh BackgroundQuery:=False
Next i
End With
以及刷新工作簿中的所有查詢的列Query Name
每一行,我可以使用
'code for generic query connections
For Each objList In wks.ListObjects
If objList.SourceType = xlSrcQuery Then 'only refresh if it's the right query type
'ensure it's using the right connection/database as specified on the Control sheet
strConnection = "ODBC;DSN=MS Access Database;DBQ=" & Range("dbFilePath") & _
Range("dbName") & ";DefaultDir=" & Range("dbFilePath") & _
";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
With objList.QueryTable
.Connection = strConnection
.BackgroundQuery = False
.Refresh
End With
count = count + 1
End If
Next
您是否嘗試過簡單的'activeworkbook.connections(STR).refresh'? – Rory 2014-12-08 08:02:18
我沒有想到這一點,是的它適用於刷新個人查詢。但是,我沒有在我的問題中明確表示,我希望能夠設置查詢的'.Connection'屬性。我相應地更新了我的問題。 – tospig 2014-12-08 22:58:18
你的第2部分將需要:'用wks.Listobjects(str).QueryTable' – Rory 2014-12-09 11:49:20