2010-08-31 40 views
0

我在我的Excel文件中有3列(ID,類型,月)的表。錯誤1004:與vba創建數據透視表時無效的引用

明知多次出現很多項目,我需要得到每月每個ID出現的次數,然後獲得兩次出現的ID的數量,出現三次,...

有人告訴我數據透視表就是解決方案。所以我用宏記錄器創建了一個數據透視表。當我嘗試執行宏時,它向我發送錯誤1004:無效的引用。

這裏我的宏:

Sub Relivr() 
' 
Dim LastRow As Long 

LastRow = ActiveWorkbook.Worksheets("Delivery").Range("A65536").End(xlUp).Row 

'the error comes from this line 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="'Delivery'!R1C1:R" & LastRow & "C4", Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:="'Delivery'!R1C13", TableName:="Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion12* 
    Sheets("Delivery").Select 
    Cells(1, 13).Select 
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("ID") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields(_ 
     "Month") 
     .Orientation = xlColumnField 
     .Position = 1 
    End With 

    ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _ 
     PivotTables("Tableau croisé dynamique2").PivotFields("type"), _ 
     "Nb delivries", xlCount 

    ActiveSheet.PivotTables("Tableau croisé dynamique2").RowGrand = False 

    Range("H3").Select 
    ActiveCell.FormulaR1C1 = "=COUNTIF(RC[6]:R[12342]C[6],""=2"")" 
    Range("H4").Select 
    ActiveCell.FormulaR1C1 = "=COUNTIF(R[-1]C[7]:R[12341]C[7],""=2"")" 

End Sub 

我使用Office 2007的

任何和所有幫助表示讚賞。

感謝

+0

你*必須*爲此使用VBA嗎?這種表格非常容易處理數據透視表 - 無需代碼。 – 2010-09-01 23:40:08

+0

不幸的是,我必須使用vba做爲程序的一部分。 – daria 2010-09-02 00:03:51

回答

0

兩個你能做到這一點的方法:

  1. 正如你所說,數據透視表將是顯而易見的選擇,但我不知道爲什麼你認爲VBA會妨礙你使用一個?在VBA中操作數據透視表比較容易,一旦你掌握了它 - 宏記錄器對於學習對象模型的來龍去脈非常有用,或者here是一個入門教程。

  2. 或者,您可以使用ADO連接到數據並使用SQL查詢獲取所需的信息。請注意,這將要求數據在單獨的工作表上適當格式化,但這可以作爲程序的一部分進行管理。微軟有a good guide to using ADO to query Excel data

+0

感謝您的回覆,這只是我不知道如何操縱vba中的數據透視表。請給我一個示例代碼或鏈接,我可以找到如何做到這一點。 – daria 2010-09-01 11:28:29

+0

我有一個快速的谷歌,雖然有很多'讓你開始'的代碼示例(我已經添加了一個鏈接),但沒有一個好的端到端教程。正如我所說,我學會了使用宏錄像機,至少在這種情況下,它確實是一個很好的學習方式。 – Lunatik 2010-09-01 13:04:49