2015-05-13 488 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的工作簿。 (另外:奇怪的是,在这种情况下它确实有效,但直到提供的索引高于包含该代码的工作簿中的工作表数量)无论如何,最好指定工作簿。