Database Excel VBA:更新数据透视源数据
我试图记录代码以更新pivot sourcedata,这给了我以下信息:Database Excel VBA:更新数据透视源数据,database,vba,excel,pivot,Database,Vba,Excel,Pivot,我试图记录代码以更新pivot sourcedata,这给了我以下信息: ActiveSheet.PivotTableWizard SourceType:=xlExternal, _ SourceData:=QueryArry1, _ Connection:=Array( _ Array("ODBC;DSN=MS Access Database;DBQ=" & DBDir & "\" & DBName & ";"), _
ActiveSheet.PivotTableWizard SourceType:=xlExternal, _
SourceData:=QueryArry1, _
Connection:=Array( _
Array("ODBC;DSN=MS Access Database;DBQ=" & DBDir & "\" & DBName & ";"), _
Array("DefaultDir=" & DBDir & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;") _
)
但这甚至不允许我指定要更新哪个透视表。。。或者甚至做我真正想做的事情,即更新数据透视缓存,以便更新使用相同源的所有数据透视表
那么,更新sourcedata的好方法是什么呢
谢谢
编辑:
但我甚至得到了“应用程序定义的或对象定义的错误”错误,原因很简单:
str = Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText
Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText = str
我再次检查了我的数据透视表是否仍在访问实时数据,并刷新它是否仍然有效。。。但是我无法将命令字符串设置为当前的值?真奇怪
谢谢可以通过工作簿访问数据透视缓存。您可以使用以下子项列出所有当前缓存:
Option Explicit
Private Sub listCaches()
Dim selectedCache As PivotCache
For Each selectedCache In ThisWorkbook.PivotCaches
Debug.Print selectedCache.Index
Debug.Print selectedCache.Connection
Next selectedCache
End Sub
您可以访问要编辑的连接:
ThisWorkbook.PivotCaches(yourIndex).Connection
注意:更改连接后,您应呼叫:
ThisWorkbook.PivotCaches(yourIndex).Refresh
编辑:您可以更改命令文本,而不是更改源数据。这应该有同样的效果。以下代码适用于我:
ThisWorkbook.PivotCaches(1).CommandText = "SELECT movies.title, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies"
ThisWorkbook.PivotCaches(1).Refresh
这段代码还更新了我的SourceData
Edit2:通过数据透视表更改命令文本:
Sheets("mySheet").PivotTables("PivotTable1").PivotCache.CommandText = "SELECT movies.title as meh, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies"
Sheets("mySheet").PivotTables("PivotTable1").PivotCache.Refresh
注意:moviesDB是一个.mdb文件,movies是表/查询
注2:它还可以帮助您
调试。在更改工作命令文本之前,请打印它。这将为您的新CommandText提供一个模板。可以通过工作簿访问数据透视缓存。您可以使用以下子项列出所有当前缓存:
Option Explicit
Private Sub listCaches()
Dim selectedCache As PivotCache
For Each selectedCache In ThisWorkbook.PivotCaches
Debug.Print selectedCache.Index
Debug.Print selectedCache.Connection
Next selectedCache
End Sub
您可以访问要编辑的连接:
ThisWorkbook.PivotCaches(yourIndex).Connection
注意:更改连接后,您应呼叫:
ThisWorkbook.PivotCaches(yourIndex).Refresh
编辑:您可以更改命令文本,而不是更改源数据。这应该有同样的效果。以下代码适用于我:
ThisWorkbook.PivotCaches(1).CommandText = "SELECT movies.title, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies"
ThisWorkbook.PivotCaches(1).Refresh
这段代码还更新了我的SourceData
Edit2:通过数据透视表更改命令文本:
Sheets("mySheet").PivotTables("PivotTable1").PivotCache.CommandText = "SELECT movies.title as meh, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies"
Sheets("mySheet").PivotTables("PivotTable1").PivotCache.Refresh
注意:moviesDB是一个.mdb文件,movies是表/查询
注2:它还可以帮助您调试。在更改工作命令文本之前,请打印它。这将为您的新CommandText提供一个模板。连接正常,我正在尝试更改源数据。。。但当我尝试“ThisWorkbook.PivotCaches(2).SourceData=QueryAry1”时,会出现“应用程序定义或对象定义错误”。。。我开始认为这种类型的SourceData引用是只读的,不能用于设置值。我尝试了几种不同形式的QueryAry1,包括“QueryAry1=ThisWorkbook.PivotCaches(2).SourceData”。。。我总是遇到同样的错误我不确定你的查询里的内容是什么,但我想你想更改发送到数据库的查询。更改命令文本对我很有用。我在回答中添加了一个示例代码。Pivot缓存不断更改其索引。。。因此,我正在尝试命令:“工作表(“总计”).PivotTables(“数据透视表1”).PivotCache.CommandText=“从总计中选择*”,但它给了我一个错误:“应用程序定义的或对象定义的错误”。我能够用我在回答中添加的代码更改CommandText到高数据透视表。我还可以通过尝试将CommandText设置为错误的查询(如“SEEELEKT*From…”)或在查询中不包含数据库的路径来复制您的错误。谢谢您的帮助。虽然它仍然不起作用,但您确实帮助我完善了我的问题和方法。我已经创建了一个新线程来解决我在这里遇到的特定错误:连接很好,我正在尝试更改SourceData。。。但当我尝试“ThisWorkbook.PivotCaches(2).SourceData=QueryAry1”时,会出现“应用程序定义或对象定义错误”。。。我开始认为这种类型的SourceData引用是只读的,不能用于设置值。我尝试了几种不同形式的QueryAry1,包括“QueryAry1=ThisWorkbook.PivotCaches(2).SourceData”。。。我总是遇到同样的错误我不确定你的查询里的内容是什么,但我想你想更改发送到数据库的查询。更改命令文本对我很有用。我在回答中添加了一个示例代码。Pivot缓存不断更改其索引。。。因此,我正在尝试命令:“工作表(“总计”).PivotTables(“数据透视表1”).PivotCache.CommandText=“从总计中选择*”,但它给了我一个错误:“应用程序定义的或对象定义的错误”。我能够用我在回答中添加的代码更改CommandText到高数据透视表。我还可以通过尝试将CommandText设置为错误的查询(如“SEEELEKT*From…”)或在查询中不包含数据库的路径来复制您的错误。谢谢您的帮助。虽然它仍然不起作用,但您确实帮助我完善了我的问题和方法。我已经创建了一个新线程来解决我在这里遇到的特定错误: