将Excel工作表名称传递给宏VB

时间:2017-10-11 17:23:59

标签: excel vba excel-vba pivot-table

我认为这应该是一个简单的考虑我的VB知识很少:)我已经录制了一个宏来为当前工作表上的范围创建一个数据透视表。当然,这给我的是为特定工作表创建数据透视表的代码。我正在尝试调整代码以获取活动工作表的名称,以便我可以在不同工作表中使用此宏。我试图搜索并找到如何检索名称,然后将该名称提供给将要创建数据透视表的代码。

我在代码的ActiveWorkbook.PivotCaches.Create部分遇到了障碍。我收到"运行时错误' 1004':应用程序定义的错误或对象定义的错误"消息。

非常感谢任何帮助!

Sub Macro1()

Dim sht As String
sht = ActiveSheet.Name

    Columns("A:K").Select
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        Worksheets(sht).Range("!R1C1:R1048576C11"), Version:=6).CreatePivotTable TableDestination:= _
        Worksheets(sht).Range("!R1C14"), TableName:="PivotTable3", DefaultVersion:=6
    ActiveSheet.Select
    Cells(1, 14).Select
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Department")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable3").PivotFields( _
        "Originating Master Name")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Net")
        .Orientation = xlRowField
        .Position = 3
    End With
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Month")
        .Orientation = xlRowField
        .Position = 4
    End With
    ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables( _
        "PivotTable3").PivotFields("Net"), "Count of Net", xlCount
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Month")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("Count of Net")
        .Caption = "Sum of Net"
        .Function = xlSum
    End With
End Sub

1 个答案:

答案 0 :(得分:1)

更改此

Worksheets(sht).Range("!R1C1:R1048576C11")

到此

ActiveWorkbook.Sheets(sht).Range("A1:K1048576")

这个

 Worksheets(sht).Range("!R1C14")

到此

 ActiveWorkbook.Sheets(sht).Range("N1")