AME*_*AME 1 excel vba excel-vba
我创建了一个子例程来将工作表中的所有单元格存储在名为"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
Run Code Online (Sandbox Code Playgroud)
现在,我想引用此对象来创建包含数据的数据透视表:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
CLrng3.Cells, Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="CancelSummary!R1C1", TableName:="CancelPivot", _
DefaultVersion:=xlPivotTableVersion12
Run Code Online (Sandbox Code Playgroud)
问题是当我运行这部分代码时,我得到"类型不匹配错误13".有谁知道为什么我可能会收到此错误以及如何解决它?
谢谢!
如果您尝试使用宏录制器录制代码,您将看到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
Run Code Online (Sandbox Code Playgroud)