我正在尝试编写一个宏来在新工作表中创建数据透视表。我在消除对工作表名称的依赖方面遇到了问题,因为我的数据名称每天都在变化,但格式却没有。
我的宏错误此处出现“运行时错误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”替换什么?
答案 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 _
.........
我希望这会有所帮助。