【问题标题】:Creating a Macro in VBA to make pivot table from selected data在 VBA 中创建宏以根据选定数据制作数据透视表
【发布时间】:2018-04-12 21:16:00
【问题描述】:

我是 VBA 新手,我正在尝试创建一个宏,我将使用该宏制作一个按钮,以便根据我粘贴到某个工作表中的数据制作一个数据透视表。

下面的代码来自一个宏,我试图逐步生成我希望代码如何运行的宏。

我正在选择某些数据(A:G 列),然后将该数据粘贴到另一个工作表中,然后创建一个空白表。

我的代码:

Sub Macro2()
'
' Macro2 Macro
'

'
    Cells.Select
    Range("A672198").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Sheet2!R1C1:R1048576C7", Version:=xlPivotTableVersion15).CreatePivotTable _
        TableDestination:="Sheet11!R3C1", TableName:="PivotTable6", DefaultVersion _
        :=xlPivotTableVersion15
    Sheets("Sheet11").Select
    Cells(3, 1).Select
End Sub

问题来自:

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Sheet2!R1C1:R1048576C7", Version:=xlPivotTableVersion15).CreatePivotTable _
            TableDestination:="Sheet11!R3C1", TableName:="PivotTable6", DefaultVersion _
            :=xlPivotTableVersion15

带有以下错误消息:

运行时错误“5”:无效的过程调用或参数

我曾尝试研究如何制作一个基本宏来为我的数据创建一个空白数据透视表,但我似乎无法弄清楚。

我还查看了该站点的许多帖子,但没有任何帮助。我尝试引用 this 帖子但没有运气。

我使用的是 Microsoft Excel 2013*

【问题讨论】:

  • 伟大的第一次尝试亚历克斯,我想我们可以从这里帮助你 - 不幸的是,使用数据透视表创建记录宏可能有点棘手。首先,您要从哪个工作表中获取 A:G 列,以及您要在哪个工作表上粘贴该数据?您是否总是需要添加新工作表?工作表名称是什么重要吗?
  • @dwirony 感谢您的支持!所以我总是会从 A:G 列中获取数据,但 A:G 的行长会根据数据而变化。此外,我总是将数据粘贴到工作表 2 中,并且希望在工作表 3 中创建一个数据透视表。如果有一个新工作表太多,我可以将数据透视表与原始数据放在同一个工作表中(工作表2)。在这个时间点上,这个名字并不重要。谢谢!

标签: vba excel debugging


【解决方案1】:

试一试 - 这将从 Sheet1 获取列 A:G 并创建一个新工作表(命名为任何名称),将所有数据粘贴到该工作表上的列 A:G 中,然后创建第三个工作表并创建一个基于工作表 2 中的数据的新数据透视表。

Option Explicit
Sub Test()

Dim sht1 As Worksheet, sht2 As Worksheet, sht3 As Worksheet
Dim lastrow As Long

Set sht1 = ThisWorkbook.Worksheets("Sheet1")
lastrow = sht1.Cells(sht1.Rows.Count, "A").End(xlUp).Row

Set sht2 = Sheets.Add(After:=Sheets(Sheets.Count))
Set sht3 = Sheets.Add(After:=Sheets(Sheets.Count))

sht2.Range("A1:G" & lastrow).Value = _
sht1.Range("A1:G" & lastrow).Value

ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        sht2.Name & "!R1C1:R" & lastrow & "C7", Version:=6).CreatePivotTable TableDestination:= _
        sht3.Name & "!R3C1", DefaultVersion:=6

End Sub

【讨论】:

    【解决方案2】:

    试试这个:

    Sub create_pivot()
    
    Dim mysourcedata, mydestination As String
    Dim lr As Long
    
    lr = Sheets("Sheet1").Range("A1").End(xlDown).Row '' find your last row with data
    
    mysourcedata = "Sheet1!R1C1:R" & lr & "C5"
    mydestination = "Sheet2!R1C1"
    
        Sheets("Sheet2").Select
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, sourcedata:= _
            mysourcedata, Version:=6).CreatePivotTable TableDestination:= _
            mydestination, TableName:="PivotTable1", DefaultVersion:=6
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多