我有一些具有相同结构和不同数据的mdb数据库。我做了一个循环来在所有这些数据库中使用Querytable进行相同的查询。 第一个问题是这个代码为每个mdb创建一个新的Querytable(我在循环后删除它,但我不知道是否有更好的方法)。 第二个问题是所有信息都应该是数据透视表的数据源。当我运行下面的代码时,我遇到了错误,因为"我试图覆盖数据透视表"
你能帮助我吗?我真正需要做的是在一些mdb文件中执行相同的查询,并将数据作为一个数据透视表放在一起For i = 1 To UBound(strPath)
varConn = "ODBC;DBQ=" + strPath(i) + ";Driver={Microsoft Access Driver (*.mdb)}"
With Worksheets(wksDestino).QueryTables.Add(Connection:=varConn, Destination:=Worksheets(wksDestino).Cells(iLastRow, 1))
.FieldNames = bHeader
.CommandText = varSQL
.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=True
.PreserveColumnInfo = True
.AdjustColumnWidth = bHeader
End With
iLastRow = Worksheets(wksDestino).Cells(Cells.Rows.Count, "A").End(xlUp).Row + 1
bHeader = False
Next i
问题是这是数据透视表的数据源
答案 0 :(得分:0)
未经测试 - 这个答案将有助于你的帖子的前半部分。
每次添加新的 QueryTable 之前,您可以将QueryTable变量类型设置为QueryTable,如果它不存在则会添加它。如果QueryTable已经存在,它将只刷新数据。
Dim QryTbl As QueryTable
' if the QryTbl doesn't exist, create it first
On Error Resume Next
Set QryTbl = Worksheet(wksDestino).QueryTables("My_Query_Table_Name") ' modify this line according to the name you want to give your Query Table
On Error GoTo 0
If QryTbl Is Nothing Then
Set QryTbl = Worksheet(wksDestino).QueryTables.Add( _
Connection:=rstRecordset, _
Destination:=Range("A1"))
QryTbl.Name = "My_Query_Table_Name" ' modify the name according to your needs
Else
' just refresh the QueryTable data
QryTbl.Refresh True
End If
答案 1 :(得分:0)
如果它们具有相同的列名,您可以组合.CommandText SQL中的表:
SELECT * FROM Table1 IN 'C:\Database1.mdb' UNION ALL
SELECT * FROM Table2 IN 'C:\Database2.mdb' UNION ALL
SELECT * FROM Table3 IN 'C:\Database3.mdb'