2011-11-28 35 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