СитуацияExcel VBA - Обновить выбранные запросы/соединения
У меня есть 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
.
Возможно ли это?
Примечания
Этот код показывает, как я получаю каждую строку в столбце Query Name
таблицы 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
И для обновления всех запросов в книге я могу использовать
'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 (ул) .refresh'? – Rory
Я не думал об этом, и да, это работало для обновления индивидуальных запросов. Однако то, что я не ясно объяснил в своем вопросе, состояло в том, что я хочу также установить свойство '.Connection' запроса. Я обновил свой вопрос. – tospig
Ваша часть 2 должна быть: 'С wks.Listobjects (str) .QueryTable' – Rory