Excel宏运行时错误424

Excel宏运行时错误424,excel,vba,Excel,Vba,我找不到运行时错误424的根本原因。我知道这和一个丢失的物体有关,但我不确定在这种情况下它会在哪里或是哪个物体。我的假设与ActiveSheet有关,但我有点迷茫 Sub Macro1() ' ' Macro1 Macro ' ' Sheets.Add 错误从这里开始 PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ ActiveSheet.Range("A1").CurrentRegion.Select, Versi

我找不到运行时错误424的根本原因。我知道这和一个丢失的物体有关,但我不确定在这种情况下它会在哪里或是哪个物体。我的假设与ActiveSheet有关,但我有点迷茫

Sub Macro1()
'
' Macro1 Macro
'

'
Sheets.Add
错误从这里开始

PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    ActiveSheet.Range("A1").CurrentRegion.Select, Version:= _
    xlPivotTableVersion12).CreatePivotTable TableDestination:="Sheet1!R3C1", _
    TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12
此处结束错误

Sheets("Sheet1").Select
Cells(3, 1).Select

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Source Type")
    .Orientation = xlRowField
    .Position = 1

End With

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Category")
    .Orientation = xlRowField
    .Position = 2

End With

ActiveSheet.PivotTables("PivotTable1").PivotFields("Category").Orientation = _
    xlHidden

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Activity")
    .Orientation = xlRowField
    .Position = 2

End With

ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
    "PivotTable1").PivotFields("USD Amount"), "Sum of USD Amount", xlSum
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
    "PivotTable1").PivotFields("Quantity"), "Sum of Quantity", xlSum

End Sub

录制的宏的问题在于根本没有定义对象

我建议用变量替换所有“活动”短语。这是一个开始:

Dim wb As Workbook
Set wb = ActiveWorkbook

Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = wb.Sheets(1)
Set ws2 = wb.Sheets(2)

Dim Caches As PivotCache


Set Caches = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    ws2.Range("A1:C3"), Version:= _
    xlPivotTableVersion12)

我很少需要以编程方式创建透视表,因此,为了了解正在发生的事情,我创建了一个小子步骤:

这会编译为OK,但会引发错误438:对象不支持此属性或方法。我在对象浏览器中搜索数据透视缓存,发现它是工作簿和数据透视表的成员它不是工作表的成员 因此,更改代码:

Sub CreatePivotOnNewSheet()
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    ActiveSheet.Range("A1").CurrentRegion, Version:= _
    xlPivotTableVersion12).CreatePivotTable TableDestination:="Sheet1!R3C1", _
    TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12
End Sub
现在我们得到一个运行时错误:

它需要更大才能显示完整的原因(感谢微软!),但我猜它接着说的是对一个至少包含两行且其顶行没有空白单元格的区域的引用。在中断模式下,我转到新添加的工作表,创建了一个小2x2数据表。回到IDE中,按F8键,虽然pivot表没有定义任何行/列等,但它仍然工作。我还没有尝试测试您剩下的代码,这些代码似乎创建了定义——我将把这留给您

Sub CreatePivotOnNewSheet()
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    ActiveSheet.Range("A1").CurrentRegion, Version:= _
    xlPivotTableVersion12).CreatePivotTable TableDestination:="Sheet1!R3C1", _
    TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12
End Sub