Vba 录制的宏出现运行时错误5

Vba 录制的宏出现运行时错误5,vba,excel,excel-2010,Vba,Excel,Excel 2010,我是VBA新手。 我录制了一个宏并想编辑它。录制完后,我想运行一次。但当我这样做时,它返回运行时错误5 宏应从一张工作表中获取和,并将其添加到另一张工作表的数据透视表中 这就是错误产生的代码 ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "sourcetable!R1C1:R1048576C21", Version:=xlPivotTableVersion14). _ Create

我是VBA新手。 我录制了一个宏并想编辑它。录制完后,我想运行一次。但当我这样做时,它返回运行时错误5

宏应从一张工作表中获取和,并将其添加到另一张工作表的数据透视表中

这就是错误产生的代码

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "sourcetable!R1C1:R1048576C21", Version:=xlPivotTableVersion14). _
    CreatePivotTable TableDestination:="Tabelle2!R3C1", TableName:= _
    "PivotTable1", DefaultVersion:=xlPivotTableVersion14

感谢您的帮助首先:sourcetable和Tabelle2工作表是否存在

然后,尝试删除所有可选的无意义参数:

ActiveWorkbook.PivotCaches.Create(xlDatabase, "sourcetable!R1C1:R1048576C21") _
    .CreatePivotTable ActiveWorkbook.Worksheets("Tabelle2").Range("R3C1")

第一:是否存在sourcetable和Tabelle2工作表

然后,尝试删除所有可选的无意义参数:

ActiveWorkbook.PivotCaches.Create(xlDatabase, "sourcetable!R1C1:R1048576C21") _
    .CreatePivotTable ActiveWorkbook.Worksheets("Tabelle2").Range("R3C1")

不,不,这是一张新的单子,只适合这个pivot@SiddharthRout–初学者4分钟前

最简单的方法是

With ActiveWorkbook
    .Sheets("Tabelle2").Cells.Clear

    .PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "sourcetable!R1C1:R1048576C21", Version:=xlPivotTableVersion14). _
    CreatePivotTable TableDestination:="Tabelle2!R3C1", TableName:= _
    "PivotTable1", DefaultVersion:=xlPivotTableVersion14
End With
我还注意到,在第1048576行之前,您已经定义了源数据。为什么会这样?更完美的方法是找到最后一行,然后构建范围。比如说

Sub Sample()
    Dim lRow As Long

    With ActiveWorkbook
        '~~> Find last row in sheet sourcetable
        With .Sheets("sourcetable")
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                lRow = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Row
            Else
                lRow = 1
            End If
        End With

        .Sheets("Tabelle2").Cells.Clear

        .PivotCaches.Create(SourceType:=xlDatabase, _
                            SourceData:="sourcetable!R1C1:R" & _
                                                        lRow & _
                                                        "C21", _
                            Version:=xlPivotTableVersion14).CreatePivotTable _
                            TableDestination:="Tabelle2!R3C1", _
                            TableName:="PivotTable1", _
                            DefaultVersion:=xlPivotTableVersion14
    End With
End Sub
子样本()
暗淡的光线和长的一样
使用ActiveWorkbook
“~~>查找图纸源表中的最后一行
带.Sheets(“sourcetable”)
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lRow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lRow=1
如果结束
以
.Sheets(“Tabelle2”).Cells.Clear
.PivotCaches.Create(SourceType:=xlDatabase_
SourceData:=“sourcetable!R1C1:R”&_
lRow&_
“C21”_
版本:=xlPivotTableVersion14)。CreatePivotTable_
TableDestination:=“Tabelle2!R3C1”_
TableName:=“数据透视表1”_
DefaultVersion:=xlPivotTableVersion14
以
端接头

不,不,这是一张新的单子,只适合这个pivot@SiddharthRout–初学者4分钟前

最简单的方法是

With ActiveWorkbook
    .Sheets("Tabelle2").Cells.Clear

    .PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "sourcetable!R1C1:R1048576C21", Version:=xlPivotTableVersion14). _
    CreatePivotTable TableDestination:="Tabelle2!R3C1", TableName:= _
    "PivotTable1", DefaultVersion:=xlPivotTableVersion14
End With
我还注意到,在第1048576行之前,您已经定义了源数据。为什么会这样?更完美的方法是找到最后一行,然后构建范围。比如说

Sub Sample()
    Dim lRow As Long

    With ActiveWorkbook
        '~~> Find last row in sheet sourcetable
        With .Sheets("sourcetable")
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                lRow = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Row
            Else
                lRow = 1
            End If
        End With

        .Sheets("Tabelle2").Cells.Clear

        .PivotCaches.Create(SourceType:=xlDatabase, _
                            SourceData:="sourcetable!R1C1:R" & _
                                                        lRow & _
                                                        "C21", _
                            Version:=xlPivotTableVersion14).CreatePivotTable _
                            TableDestination:="Tabelle2!R3C1", _
                            TableName:="PivotTable1", _
                            DefaultVersion:=xlPivotTableVersion14
    End With
End Sub
子样本()
暗淡的光线和长的一样
使用ActiveWorkbook
“~~>查找图纸源表中的最后一行
带.Sheets(“sourcetable”)
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lRow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lRow=1
如果结束
以
.Sheets(“Tabelle2”).Cells.Clear
.PivotCaches.Create(SourceType:=xlDatabase_
SourceData:=“sourcetable!R1C1:R”&_
lRow&_
“C21”_
版本:=xlPivotTableVersion14)。CreatePivotTable_
TableDestination:=“Tabelle2!R3C1”_
TableName:=“数据透视表1”_
DefaultVersion:=xlPivotTableVersion14
以
端接头

工作表
Tabelle2
是否有除枢轴以外的任何其他数据?不,不是,这是一张新工作表,仅用于此枢轴@SiddharthRoutOkk发布回答工作表
Tabelle2
是否有除枢轴以外的任何其他数据?不,这不是一张新工作表,仅用于此枢轴@SiddharthRoutOkk发布回答是的存在。我试过你的解决方案,但现在我有一个错误438:它们是存在的。我尝试了您的解决方案,但现在出现了一个错误438:注意数据透视表名称与现有数据透视冲突。@LS\u dev:如果您一直在该表中创建数据透视1,那么它将不会:)哇,它工作了!非常感谢你!但我还有一个问题:“If Application.WorksheetFunction.CountA(.Cells)0 Then”是什么意思?请注意,数据透视表名称与现有数据透视冲突。@LS\u dev:如果您一直在该数据透视表中创建数据透视1,那么它就不会:)哇,它工作得很好!非常感谢你!但我还有一个问题:“If Application.WorksheetFunction.CountA(.Cells)0 Then”是什么意思?