2012-10-05 70 views
2

我以前用VB很長一段時間在當天下班回來(作爲Visual Studio PKG的一部分),以及一個新的工作有我的工作有點用VBA作爲其一部分一個副項目。我不會說我對noobie船很直接,但我仍然重新學習了很多我以前做過的事情(更不用說,把我在學習VB時沒有涉及的excel特定位合併在Visual Studio)Excel的VBA:PivotCaches.Create類型不匹配

我已經有了通過VBA在另一個項目中做了幾個數據透視表,但我有一個特定的項目現在已經難倒我。

我一直重用一些在VBA Excel引用書中列舉的透視表的代碼,並已經工作的罰款只是遠。但是在這個特定的工作簿中,工作表上按下了一個按鈕,該按鈕在傳遞一些變量的同時調用一個函數。一切都很好,並且很花哨,但是當我試圖創建緩存時,我收到一個錯誤,告訴我我有一個不匹配錯誤?根據我的理解,字符串和變體可以在創建數據透視緩存時作爲源數據傳遞,但是之前幾次重複代碼,直到現在我還沒有問題。


Private Function createPivotTable(ByRef sheetName As Variant, ByVal sheetNum As Integer) 

Dim DataRange As Range 
Dim pivotTableCache As PivotCache 
Dim pivotTableReport As PivotTable 

ActiveWorkbook.Worksheets("EXAMPLE SHEET").Activate 
Range("A1").Select 
Set DataRange = Selection.CurrentRegion 

Worksheets.Add.Name = sheetName 

Set pivotTableCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, _ 
     SourceData:=DataRange) 
Set pivotTableReport = pivotTableCache.createPivotTable(TableDestination:=ActiveWorkbook.Worksheets(sheetName).Range("A1"), _ 
TableName:="PVR") 

.... 

所以我基本上卡住了。我發現了另一個線程,圍繞類似的問題here跳舞。評分最高的評論確實解決了一個問題,因爲當我沿着範圍位置以字符串的形式傳遞它時,我不再有不匹配的問題,但當我嘗試創建實際的表本身時,我不斷收到1004錯誤,告訴我我需要選擇多行數據(從我可以解釋的 - 遺憾的是,用於錯誤代碼的msgbox切斷了這種有趣的行哈哈)。但是,我已經檢查過了,選擇確實抓住了我的整個表格(所有6列和1000行)。

任何幫助或指向正確的方向將不勝感激。

*驗證;我將sheetName作爲變體而不是字符串傳遞,因爲我使用輸入框來要求用戶命名工作表,並且作爲失敗保險箱,將輸入框的句柄標註爲變體允許我檢查用戶是否已取消操作(然後返回值爲false而不是空字符串)。

回答

2

看起來雖然你有適當的範圍內確定,但沒有找到數據,因爲你的範圍並不是指包含數據的工作表。您可能想嘗試:

Private Function createPivotTable(ByRef sheetName As Variant, ByVal sheetNum As Integer) 

    Dim pivotTableCache As PivotCache 
    Dim pivotTableReport As PivotTable 

    Worksheets.Add.Name = sheetName 

    Set pivotTableCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, _ 
    SourceData:=Sheets("EXAMPLE SHEET").Range("A1").CurrentRegion) 
    Set pivotTableReport = pivotTableCache.createPivotTable(_ 
    TableDestination:=ActiveWorkbook.Worksheets(sheetName).Range("A1") _ 
    , TableName:="PVR") 

    ....