【问题标题】:Passing Excel Sheet name into macro VB将 Excel 工作表名称传递给宏 VBA
【发布时间】:2017-10-12 03:38:38
【问题描述】:

考虑到我对 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

【问题讨论】:

  • 我目前使用 Excel 2016

标签: vba excel pivot-table


【解决方案1】:

改变这个

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

到这里

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

还有这个

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

到这里

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

【讨论】:

  • 成功了!!!非常感谢!您介意给我简要说明一下该范围的问题吗?
  • 很高兴我们找到了答案!您的宏将记录的内容类似于 "Sheet5!R1C12:R4C5" ,请注意整个范围引用都在 "" 内。当您使用 Worksheets(sht).Range("!R1C1:R1048576C11") 的变量创建范围时。如错误所示,这不是有效的 Range 构造。这 !表示 Worksheet 对象的结尾,即 Sheet5!
  • 非常有意义。再次感谢 QHarr!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多