2015-05-13 37 views
0

我有一個工作簿4 sheets- 首先。我試圖在每張表格後面添加一張額外的表格來創建數據透視表。他們將被命名爲第一樞軸,第二樞軸,第三樞軸第四樞軸「Workbook.Sheets.Add後」 給出了 「下標越界」 的錯誤(VBA)

我能夠創建第一樞軸片,但我得到一個下標越界錯誤。我正在使用的代碼是

Function Pivotizer(FilePathAndName As String) 
    On Error GoTo ErrorTeller 
    Dim NewBook As Workbook, CurrSheet, sht As Worksheet, i, FinalCol, ColIndex As Integer, FinalRow As Long 
    Dim pvtCache As PivotCache, pvt As PivotTable, StartPvt, SrcData, KountOf As String 

    Set NewBook = Workbooks.Open(FilePathAndName) 


    For Each CurrSheet In NewBook.Worksheets 
    FinalRow = CurrSheet.Cells.Find(What:="*", After:=CurrSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ 
       xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row 
    FinalCol = CurrSheet.Cells(1, CurrSheet.Columns.Count).End(xlToLeft).Column 

If CurrSheet.Name = "First" Then 

    NewBook.Sheets.Add After:=Worksheets(CurrSheet.Index) 
    NewBook.Sheets(CurrSheet.Index + 1).Name = "First Pivot" 

ElseIf CurrSheet.Name = "Second" Then 
    NewBook.Sheets.Add After:=Worksheets(CurrSheet.Index)'<--- This is where I get the error 
    NewBook.Sheets(CurrSheet.Index + 1).Name = "Second Pivot" 
End If 
    Next 
    Exit Function 
ErrorTeller: 
    MsgBox Err.Description 
End Function 

出於某種原因,CurrSheet.Index似乎並不奏效,第二次雖然它代表了一個有效的數字(我查使用一個MsgBox)。

有人能告訴我我做錯了什麼嗎?

+0

此代碼適用於我,直到所有現有工作表都包含一些數據。我之所以說一些數據是因爲,如果工作表中沒有數據,'.Find'將會失敗。我已經解釋了[Here](http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba)請參閱Application.WorksheetFunction.CountA(.Cells)該鏈接中的<> 0 –

回答

1

更改此:

NewBook.Sheets.Add After:=Worksheets(CurrSheet.Index) 

這樣:

NewBook.Sheets.Add After:=NewBook.Worksheets(CurrSheet.Index) 

的唯一途徑,我可以看到你收到這個錯誤訊息是,如果該代碼是在一個位置(例如的ThisWorkbook模塊),其中Worksheets(CurrSheet.Index)上它自己是指代碼而不是NewBook的工作簿。 (另外:奇怪的是,在這種情況下它確實有效,但直到提供的索引高於包含該代碼的工作簿中的工作表數量)無論如何,最好指定工作簿。