Ошибка несоответствия типа 13 – ссылка на объект

Я создал подпрограмму для хранения всех ячеек на листе в объекте под названием «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», когда я запускаю эту часть кода. У кого-нибудь есть идея, почему я могу получить эту ошибку и как ее исправить?

Благодаря!

Если вы попытаетесь записать код с помощью макрорекордера, вы увидите, что 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 
Interesting Posts
Давайте будем гением компьютера.