2011-11-28 74 views
1

我创建了一个子例程来将工作表中的所有单元格存储在名为“CNrng3”的对象中。类型不匹配13错误 - 引用对象

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”当我运行的这一部分代码。有没有人有一个想法,为什么我可能会收到这个错误,以及如何解决它?

谢谢!

+1

你是如何宣称CLrng3? – Reafidy

回答

6

如果试图记录与宏录制的代码,你将看到SourceRange希望看到作为"Cancel!R1C1:R10C5"这样的地址,其中包括工作表名称

因此,而不是

SourceData:= CLrng3.Cells

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

which retur NS三个部分

  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 
+0

有趣,但你有没有测试过,这有所作为?尽管宏记录器总是将它们提供为包含范围地址的“String”,但某些属性确实接受“Range”类型的参数。一个恰当的例子是'Series'对象的'.Values'和'.VValues'属性。 –

+0

在这种情况下,在第二张工作表“”CancelSummary“中创建数据透视表,因此所需范围”取消“的父数据表名称是基本要求。可能与您制作的要点略有不同 – brettdj

+1

+1 You可能希望将工作表名称用单引号括起来,以防万一工作表名称中有空格,如果不是这样,Excel会忠实地删除单引号而不会造成任何后果 – JimmyPena