创建数据透视表,根据活动工作表

时间:2018-02-13 14:07:21

标签: excel vba excel-vba

当谈到VBA时我很新,所以我确定这非常混乱,但我的最终目标是让全局宏从一系列数据中创建一个数据透视表,然后将其添加到工作表中以前做过的。问题在于,无论我正在使用的活动工作表中的数据量如何,我都试图使代码工作到选择所有数据的位置。

随着我不断获得的代码部分

  

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

我可以假设这个错误是由于第6行的部分而引发的。我已经在下面放置了有问题的行,并在底部放置了完整的代码。

ActiveSheet.Range("A1").Cells(xlLastCell), _

简而言之,数据透视表需要选择当前活动工作表中的任何数据以用作源。

非常感谢帮助!

Worksheets.Add(After:=Worksheets(2)).Name = "Pivot Table"
Sheets("Loan Detail").Activate
Range("A1").Select

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    ActiveSheet.Range("A1").Cells(xlLastCell), _
    Version:=xlPivotTableVersion14).CreatePivotTable _
    TableDestination:="Pivot Table!R3C3", TableName:="PivotTable1", _
    DefaultVersion:=xlPivotTableVersion14

2 个答案:

答案 0 :(得分:0)

根据sktneer的评论,我使用CurrentRegion进行了测试,它对我有用:

Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set your worksheet, amend as required
Worksheets.Add(After:=Worksheets(2)).Name = "Pivot Table"
ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
ws.Range("A1").CurrentRegion, Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:=Sheets("Pivot Table").Range("A3"), TableName:="PivotTable", DefaultVersion:=xlPivotTableVersion14
End Sub

答案 1 :(得分:0)

以下是创建数据透视表的一般代码。您可以使用此代码作为参考。

此外,您可以从以下链接下载工作簿...

https://drive.google.com/open?id=14bAhfPhbl3PNUkVc5kX4gUdtKLCDpiF0

创建数据透视表的代码:

Sub CreatePivotTable()
Dim wsData As Worksheet, wsPivot As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
Dim pf As PivotField
Dim rngSource As Range

Application.ScreenUpdating = False

Set wsData = Sheets("Data")
On Error Resume Next
Set wsPivot = Sheets("Pivot")
wsPivot.Cells.Clear
On Error GoTo 0

If wsPivot Is Nothing Then
    Set wsPivot = Sheets.Add(before:=wsData)
    wsPivot.Name = "Pivot"
End If

Set rngSource = wsData.Range("A1").CurrentRegion

'Creating Pivot Cache
Set pc = ThisWorkbook.PivotCaches.Create(xlDatabase, rngSource)

'Creating Pivot Table
Set pt = pc.CreatePivotTable(wsPivot.Range("A3"), "SalesPivot")

'Adding Row and Column Fields
pt.AddFields RowFields:="Name", ColumnFields:="Day"

'Adding Data Field
pt.AddDataField field:=pt.PivotFields("Sales"), Function:=XlConsolidationFunction.xlSum

'Adding Data Field Formatting
pt.DataFields(1).NumberFormat = "#,##0"

'Disable the Grand Total for Rows
pt.RowGrand = False

'Disable the Grand Total for Columns
pt.ColumnGrand = False

'Setting layout to Tabular View
pt.RowAxisLayout xlTabularRow

'Sorting the Row Field
Set pf = pt.PivotFields("Name")

'Sorting Descending
pf.AutoSort xlDescending, pf

'Sorting Ascending
pf.AutoSort xlAscending, pf

Application.ScreenUpdating = True
End Sub