【问题标题】:Excel - previous sheet name when defining sourcedata for chartExcel - 为图表定义源数据时的先前工作表名称
【发布时间】:2013-12-27 07:55:49
【问题描述】:

我正在尝试编写一个宏来在新工作表中创建数据透视表。我在消除对工作表名称的依赖时遇到了问题,因为我的数据名称每天都在变化,但格式没有。

我的宏错误是“运行时错误 438:对象不支持方法的这个属性”

'create pivot table
Range("A1:J25").Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    ActiveSheet.Last & "!R1C1:R25C10", Version:=xlPivotTableVersion14 _
    ).CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:= _
    "PivotTable1", DefaultVersion:=xlPivotTableVersion14

我可以用不依赖名称的“sheetx!R1C1:R25C10”替换什么?

【问题讨论】:

  • 更新:仔细查看我的代码后(我一直在使用宏记录器),我注意到尚未选择新工作表。我一起删除了对工作表名的引用,只引用了单元格。这目前有效,但我仍然对我最初问题的答案感兴趣,因为我确信我会在不久的将来处理这个问题。

标签: excel vba pivot-table


【解决方案1】:

你可以试试这个:

Sub CreatePivot()

Dim dataSource, destination As String
Dim wb As Workbook
Dim data_sheet, new_sheet As Worksheet

Set wb = ThisWorkbook
Set data_sheet = wb.Sheets("my_data") 'assuming you have Sheet named "my_data"
Set new_sheet = wb.Sheets.Add 'add the sheet
new_sheet.Name = "my_pivot" 'Rename it

dataSource = data_sheet.Name & "!" & data_sheet.Range("A1:J25").Address(ReferenceStyle:=xlR1C1) 'Set the source data, you can make this dynamic if you want
destination = new_sheet.Name & "!" & new_sheet.Range("A1").Address(ReferenceStyle:=xlR1C1) 'Set the destination which is the newly created sheet

'then add the pivot
wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
dataSource, Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:=destination, TableName:="PivotTable1", DefaultVersion _
:=xlPivotTableVersion14

'take note that version differs depending on your Excel version

End Sub

希望这能让你开始。

【讨论】:

  • 我也很欣赏你的方法,这给了我一个很好的例子,可以在编写自己的代码而不是使用宏记录器时参考。
  • 很高兴它在某种程度上帮助了你 :)
【解决方案2】:

很高兴你已经开始工作了......如果工作表名称发生变化但工作表的位置保持不变,你可以通过索引引用:

Const DataSheetIndex As Integer = 1
Dim sourceData As String

sourceData = Worksheets(DataSheetIndex).Name & "!R1C1:R25C10"

或者如果名称更改但至少具有一定的一致性,例如初始字符,您可以使用Worksheets 集合...

Dim ws As Worksheet

For Each ws In Worksheets

If (Left$(ws.Name, 4) = "test") Then

    sourceData = ws.Name & "!R1C1:R25C10"

End If

Next ws

还有a link 用于引用工作表的不同方式,以防其中一种看起来更适合您使用。

【讨论】:

  • 感谢您回答原始问题,感谢您提供资源链接!
【解决方案3】:

我刚刚遇到了同样的问题,并通过在创建数据透视表之前先重命名实际工作表来解决它。

activesheet.name = "Data"

所以你的情况是:

Range("A1:J25").Select
activesheet.name = "Data" 
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Data!R1C1:R25C10", Version:=xlPivotTableVersion14 _
.........

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 2013-04-11
    • 2015-09-29
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多