从大型数据集创建枢轴时宏发生崩溃

时间:2017-11-11 22:03:57

标签: vba excel-vba excel

我对VBA很陌生并且擅长宏,但想要自动化某些工作报告,我真的希望得到别人的帮助。我尝试通过观看YouTube视频和阅读堆栈溢出来自行修复,但解决方案与我的问题不符。现在我创建了几个宏,但我坚持应该实际创建一个数据透视表。

我首先从我拥有的数据中创建了一个常规表(使用TableP宏beloew)。看起来它工作正常(测试了一些其他数据表):

Sub tableP()
'
' tableP Macro (Creates a table of the existing data sheet, regardless the data input)
'

    ActiveCell.Cells.Select
    ActiveCell.Activate
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$1:$1048576"), , xlYes).Name = _
        "Table2"
    ActiveCell.Cells.Select       `
`End Sub   `

第二个宏(下面)理想情况下会占用该表(一个对象)并创建一个数据透视表,但是每次我使用更大的时候它会崩溃(excel在我运行宏时停止工作)数据集。

   Sub Macro1test() '
' Macro1test creates dataset out of the existing table
'      
    Dim dataname As String
    Dim Newsheet As String
    dataname = ActiveSheet.ListObjects(1).Name
        Sheets.Add
    Newsheet = ActiveSheet.Name
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            dataname, Version:=xlPivotTableVersion14).CreatePivotTable TableDestination _
            :=Newsheet & "!R3C1", TableName:="PivotTable2", DefaultVersion:= _
            xlPivotTableVersion14
        Sheets.Select
        Cells(3, 1).Select
    End Sub

请有人让我知道我做错了什么,以及为了能够在任何数据集上应用这些宏而缺少哪些步骤?

1 个答案:

答案 0 :(得分:0)

尝试下面的代码,代码注释中的解释:

Option Explicit

Sub Macro1test()
' Macro1test creates dataset out of the existing table
'
Dim dataname As String
Dim RngStr As String
Dim Newsheet As String
Dim NewSht As Worksheet

Dim PvtCache As PivotCache
Dim PvtTbl As PivotTable

' set the Range String for the Pivot Cache Source Data)
RngStr = ActiveSheet.ListObjects(1).Range.Address(False, False, xlA1, xlExternal)

' add a new sheet
Set NewSht = ThisWorkbook.Sheets.Add(after:=ActiveSheet)

' set the Pivot Cache object
Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=RngStr)

' set the New Pivot Table object
Set PvtTbl = NewSht.PivotTables.Add(PivotCache:=PvtCache, TableDestination:=NewSht.Range("A3"), TableName:="PivotTable2")

End Sub