【问题标题】:Creating Pivot Table with Dynamic Range创建具有动态范围的数据透视表
【发布时间】:2019-02-15 03:17:09
【问题描述】:

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

上面的代码会打开文件并根据需要对其进行格式化以使用数据透视表。

         '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

当我进入“创建数据透视表”部分时,第一行给了我一个运行时错误代码 1004。

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    您应该尽可能避免使用SelectActivate。我在下面修改了您的代码。您可能需要重新检查范围值。您需要在创建之前定义PivotCachePivotTable

    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")
    

    【讨论】:

    • 谢谢!非常感谢您的帮助!
    猜你喜欢
    • 2018-05-30
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多