我为创建数据透视表而录制的宏给出了以下错误:
运行时错误1004:应用程序定义的错误或对象定义的错误。
我已根据this Microsoft link从录制的宏中删除了相关部分。但是,我仍然收到同样的错误。
Sub testmacro()
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("WorksheetConnection_Sheet8!$A$1:$E$162"), Version _
:=xlPivotTableVersion15).CreatePivotTable TableDestination:="", _
TableName:="PivotTable27", DefaultVersion:=xlPivotTableVersion15
With ActiveSheet.PivotTables("PivotTable27").CubeFields("[Range].[and not]")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable27").CubeFields("[Range].[term]")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable27").AddDataField ActiveSheet.PivotTables( _
"PivotTable27").CubeFields("[Measures].[Count of family 2]"), "Count of family"
With ActiveSheet.PivotTables("PivotTable27").PivotFields( _
"[Measures].[Count of family 2]")
.Caption = "Distinct Count of family"
.Function = xlDistinctCount
End With
End Sub
调试器在ActiveWorkbook.PivotCaches.Create行引发错误。新工作表确实打开,但它是空白的。谢谢。
答案 0 :(得分:0)
简短回答 - 定义外部数据源以指向数据透视表。
更长的答案......
当我录制宏以从不同的工作簿构建数据透视表时,我得到以下内容......
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"[JunkData.xlsx]Sheet1!R1C1:R11C3", Version:=6).CreatePivotTable _
TableDestination:="Sheet6!R3C1", TableName:="PivotTable1", DefaultVersion _
:=6
您可以看到指定了SourceType:=xlDatabase
。
我还可以将工作簿JunkData.xlsx设置为外部数据源。关闭JunkData文件后,在Excel中转到Data->现有连接 - >此计算机上的连接 - >浏览更多...导航到JunkData,选择它并按照提示操作,但只进行连接。 / p>
然后,我可以录制一个新的宏。在Create Pivot表对话框中,选择“Use a external data source”并选择JunkData。
然后我得到这行代码......
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("JunkData"), Version:=6).CreatePivotTable _
TableDestination:="Sheet7!R3C1", TableName:="PivotTable2", DefaultVersion _
:=6
您的代码看起来应该是SourceType:=xlDatabase
而不是SourceType:=xlExternal
。
事实上,如果我将第一个示例更改为SourceType:=xlDatabase
,我会得到与您相同的错误(是的,我将其更改为TableDestination:=""
)。如果JunkData文件关闭,第一个例子也不会运行。
第二个示例运行良好(使用TableDestination修改)。
如果您需要从已关闭的文件创建数据透视表,我认为您需要进行外部数据连接。
答案 1 :(得分:0)
我正在添加另一个答案,因为它与第一个答案不同。
Workbook.Connections.Add2
调用。xlExternal
,即使数据位于同一工作簿中也是如此。以下宏适用于各种场景(新打开的工作簿;已打开工作簿且数据模型已存在)。如果我删除了.Add2
电话,那么我会收到相同的错误。我能得到Distinct Count。
Dim NewSht As Worksheet
'
Workbooks("Book2").Connections.Add2 "WorksheetConnection_Sheet1!$A$1:$D$20", "" _
, "WORKSHEET;[Book2]Sheet1", "Sheet1!$A$1:$D$20", 7, True, False
Set NewSht = Sheets.Add
Debug.Print NewSht.Name
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("WorksheetConnection_Sheet1!$A$1:$D$20"), Version _
:=6).CreatePivotTable TableDestination:=NewSht.Name & "!R3C1", TableName:= _
"myPivotTable", DefaultVersion:=6
NewSht.Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("myPivotTable").CubeFields("[Range].[Name]")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("myPivotTable").CubeFields.GetMeasure "[Range].[Name]" _
, xlSum, "Count of Name"
ActiveSheet.PivotTables("myPivotTable").AddDataField ActiveSheet.PivotTables( _
"myPivotTable").CubeFields("[Measures].[Count of Name]"), "Count of Name"
With ActiveSheet.PivotTables("myPivotTable").PivotFields( _
"[Measures].[Count of Name]")
.Caption = "Distinct Count of Name"
.Function = xlDistinctCount
End With
End Sub