类型不匹配13错误 - 引用对象

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".有谁知道为什么我可能会收到此错误以及如何解决它?

谢谢!

bre*_*tdj 6

如果您尝试使用宏录制器录制代码,您将看到SourceRange希望看到一个"Cancel!R1C1:R10C5"包含工作表名称的地址

所以而不是

SourceData:= CLrng3.Cells

尝试

SourceData:=(Clrng3.Parent.Name & "!" & Clrng3.Address)

它分三部分返回

  1. "取消"(作为您的范围的父级名称)
  2. "!"
  3. 和A1:E10这样的东西

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)