2013-04-16 34 views
0

我正在創建一個宏,我從db中獲取一些數據,然後創建該數據的透視圖。但在做這件事時,我得到了一些1004錯誤的一些意見。 這裏是我的代碼如果數據剛剛從db中獲取,則無法使用宏創建數據透視表

 Sub CreatePivot() 
    Dim objTable As PivotTable, objField As PivotField 
    ActiveWorkbook.Sheets("data").Select 
' data is name of the sheet 
    Range("A1").Select 
    **Set objTable = Sheet1.PivotTableWizard** 
    Set objField = objTable.PivotFields("name") 
     objField.Orientation = xlRowField 
     Set objField = objTable.PivotFields("location") 
     objField.Orientation = xlRawField 
     Set objField = objTable.PivotFields("blaa") 
     objField.Orientation = xlRowField 
     ' Specify a data field with its summary 
     ' function and format. 
     Set objField = objTable.PivotFields("money") 
     objField.Orientation = xlDataField 
     objField.Function = xlSum 
     objField.NumberFormat = " #,##0" 

     ' Specify a page field. 
     'Set objField = objTable.PivotFields("GENDER") 
     'objField.Orientation = xlPageField 

     ' Preview the new PivotTable report. 
     ActiveSheet.PrintPreview 

     ' Prompt the user whether to delete the PivotTable. 
     Application.DisplayAlerts = False 
     If MsgBox("Delete the PivotTable?", vbYesNo) = vbYes Then 
      ActiveSheet.Delete 
     End If 
     Application.DisplayAlerts = True 

    End Sub 

錯誤是說 我得到這個運行時錯誤「1004」: - 此命令要求源數據的至少兩行。您只能在一行中的選擇上使用該命令。請嘗試以下操作:如果您使用的是高級過濾器,請選擇包含至少兩行數據的單元格區域。然後再次單擊高級篩選命令。如果你正在創建一個數據透視表或數據透視圖報表,鍵入此處[停止這裏]

是我的代碼卡住設置objTable = Sheet1.PivotTableWizard

時相同的代碼我通過採取使用新的數據然後工作。這裏我使用btn_click和後面的兩個宏從數據庫獲取數據。一個宏獲取數據,然後在第二個宏創建樞軸處存在。但問題即將到來。任何人都可以幫忙嗎?

+0

感謝邁克。我嘗試了下面的方法。但不能使用數據透視緩存。你能幫我在哪裏更新我的代碼。我閱讀了關於pivotcache的知識,但是不知道如何在這裏使用。 – honey

回答

0

除了遺漏,我沒有看到您已聲明Sheet1 As Worksheet ....默認情況下,它將被初始化爲Variant,因此不會將正確的對象傳遞給PivotTableWizard方法。

此外,PivotTableWizard(Excel 2010中)的描述中提到了

這種方法不適用於OLE DB數據源。使用Add方法添加數據透視表緩存,然後根據緩存創建數據透視表報表。

相關問題