在VBA中创建宏以从选定数据创建数据透视表

时间:2018-04-12 12:44:17

标签: excel vba excel-vba debugging

我是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 *

2 个答案:

答案 0 :(得分:0)

给这一点 - 这将从A:G获取列Sheet1并创建一个新工作表(命名为),将所有数据粘贴到该工作表上的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

答案 1 :(得分:0)

试试这个:

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