내가 5 Workbook connections
는 MS Access 데이터베이스에서 해당 쿼리 데이터를 설정할 수 있고, 내가 이름 qry_1
, qry_2
그들에게 준, ..., qry_5
나는 테이블에 나열된 이러한 쿼리 이름의 선택이 워크 시트에 qry_Table
를 불렀다 :
Query Name
----------
qry_1
qry_4
qry_5
및 나는
나는 모든 쿼리를 통합 문서와 모두 새로 고침을 반복하지만 난 수없는 것 수 string
질문으로 각 쿼리 이름을 얻기 위해 테이블을 통해 루프 (.listObjects
사용) 할 수 있습니다 표에 나열된 검색어 (예 : qry_1
, qry_4
및 qry_5
) 만 선택하고 새로 고치는 방법을 알아 봅니다.
나는 .Connection
문자열을 정의 할 수 있도록 set
쿼리 개체를 사용하고 싶습니다.
이것이 가능합니까?
노트
내가 사용할 수있는 테이블 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
나는 그것에 대해 생각하지 않았으며, 그렇습니다. 개별 쿼리를 새로 고치는 데 효과적이었습니다. 그러나, 내 질문에 명시 적으로 명확하게하지 않은 것은 내가 쿼리의'.Connection' 속성을 설정할 수 있기를 원한다는 것입니다. 그에 따라 내 질문을 업데이트했습니다. – tospig
당신의 파트 2는 다음과 같아야합니다 :'wks.Listobjects (str) .QueryTable' – Rory