Excel - 为图表定义sourcedata时的上一个工作表名称

时间:2013-12-27 07:55:49

标签: excel vba pivot-table

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

我的宏错误此处出现“运行时错误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”替换什么?

3 个答案:

答案 0 :(得分:1)

很高兴你有它工作......如果工作表名称改变但工作表的位置保持不变,你可以通过索引引用:

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用于引用工作表的不同方式,以防其中一种更适合您使用。

答案 1 :(得分: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 :(得分:0)

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

activesheet.name = "Data"

所以在你的情况下,它将是:

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

我希望这会有所帮助。