Excel 创建具有动态范围的透视表

Excel 创建具有动态范围的透视表,excel,vba,pivot-table,Excel,Vba,Pivot Table,创建可以打开多个文件并向每个文件添加透视表的宏。这些文件的格式与包含透视表所需数据的工作表详细信息相同。但是每个文件都有不同数量的行,所以我尝试使用动态范围来捕获每个文件上的所有数据 上面的编码将打开文件,并根据需要对其进行格式化,以使用透视表 'Set Dynamic Range Dim startCell As String Dim lastRow As Long Dim lastCol As Long Dim WS As String

创建可以打开多个文件并向每个文件添加透视表的宏。这些文件的格式与包含透视表所需数据的工作表详细信息相同。但是每个文件都有不同数量的行,所以我尝试使用动态范围来捕获每个文件上的所有数据

上面的编码将打开文件,并根据需要对其进行格式化,以使用透视表

         'Set Dynamic Range

  Dim startCell As String
    Dim lastRow As Long
    Dim lastCol As Long
    Dim WS As String

    WS = "Details"
    Worksheets(WS).Activate

        'Find Last row and column

    lastRow = Cells(Rows.Count, Cells(1, 7).Column).End(xlUp).Row
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column

     Range(Cells(1, 7), Cells(lastRow, lastCol)).Select

   Range(Range("G1"), Range("G1").End(xlDown)).Select
   Range(Selection, Selection.End(xlToRight)).Select

          Selection.Name = "DynamicRange"

                     Sheets.Add After:=ActiveSheet

        ' Create Pivot Table

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "DynamicRange", Version:=6).CreatePivotTable TableDestination:= _
    "Sheet1!R1C1", TableName:="PivotTable1", DefaultVersion:=6
Sheets("Sheet1").Select
Cells(1, 1).Select
With ActiveSheet.PivotTables("PivotTable1")
    .ColumnGrand = True
    .HasAutoFormat = True
当我到达createpivottable部分时,第一行给出了一个运行时错误代码1004

应尽可能避免使用“选择并激活”。我已经修改了下面的代码。您可能需要重新检查范围值。在创建数据透视表之前,需要定义数据透视缓存和数据透视表

Dim startCell As String
Dim lastRow As Long
Dim lastCol As Long
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim PvtCache As PivotCache
Dim PvtTab As PivotTable

Set ws = Sheets("Details")

'Find Last row and column

lastRow = ws.Cells(ws.Rows.Count, 7).End(xlUp).Row
lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column

ws.Range(ws.Cells(1, 7), ws.Cells(lastRow, lastCol)).Name = "DynamicRange"
Set ws2 = Sheets.Add(After:=ws)
ws2.Name = "PvtTable"

' Create Pivot Table

Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Range("DynamicRange"))

Set PvtTab = PvtCache.CreatePivotTable(ws2.Cells(1, 1), "MyTable")

非常感谢。我真的很感谢你的帮助!