我创建了一个子例程来将工作表中的所有单元格存储在名为“CNrng3”的对象中。
Sub GetCLRange()
Dim CLrng1 As Range
Dim CLrng2 As Range
Sheets("Cancel").Activate
Set CLrng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious)
Set CLrng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious)
If Not CLrng1 Is Nothing Then
Set CLrng3 = Range([a1], Cells(CLrng1.Row, CLrng2.Column))
Application.Goto CLrng3
Else
MsgBox "sheet is blank", vbCritical
End If
End Sub
现在,我想引用此对象来创建包含数据的轴:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
CLrng3.Cells, Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="CancelSummary!R1C1", TableName:="CancelPivot", _
DefaultVersion:=xlPivotTableVersion12
问题是当我运行这部分代码时,我得到“类型不匹配错误13”。有谁知道为什么我可能会收到此错误以及如何解决它?
谢谢!
答案 0 :(得分:6)
如果您尝试使用宏录制器录制代码,您会看到SourceRange希望看到包含工作表名称的"Cancel!R1C1:R10C5"
等地址
所以而不是
SourceData:= CLrng3.Cells
试
SourceData:=(Clrng3.Parent.Name & "!" & Clrng3.Address)
以三部分返回
给予Cancel!A1:E10
Sub GetCLRange()
Dim CLrng1 As Range
Dim CLrng2 As Range
Dim Clrng3 As Range
Sheets("Cancel").Activate
Set CLrng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious)
Set CLrng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious)
If Not CLrng1 Is Nothing Then
Set Clrng3 = Range([a1], Cells(CLrng1.Row, CLrng2.Column))
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
("'" & Clrng3.Parent.Name & "'!" & Clrng3.Address), Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="CancelSummary!R1C1", TableName:="CancelPivot", _
DefaultVersion:=xlPivotTableVersion12
Application.Goto Clrng3
Else
MsgBox "sheet is blank", vbCritical
End If
End Sub