处理运行时错误'9':迭代工作表时下标超出范围

时间:2015-05-05 05:26:58

标签: excel vba excel-vba excel-2010

不是Excel / VB专家,但我一直在

  

运行时错误:9:下标超出范围

错误发生在For Each行。不知道为什么。我正在尝试将工作表从一个工作簿复制到另一个工作簿。

工作簿strFileName正在成功打开,工作簿确实包含另外两个工作表,但代码在下一行失败。我见过类似问题的类似帖子,但没有运气。任何建议都会很棒。 (我正在使用Excel 2010)谢谢

Workbooks.Open (strFileName)

For Each sheet In Workbooks(strFileName).Worksheets
    total = Workbooks(activeWKBook).Worksheets.Count
    Workbooks(strFileName).Worksheets(sheet.Name).Copy _
    after:=Workbooks(activeWKBook).Worksheets(total)
Next sheet

1 个答案:

答案 0 :(得分:1)

strFileName包含工作簿的完整路径 所以你不能在Workbooks(strFileName)中使用它,因为它只需要工作簿名称。

这是你应该怎么做的:

Dim wbName As String
wbName = Split(strFileName, "\")(Ubound(Split(strFileName, "\"))) ' Get the WB Name

For Each sheet In Workbooks(wbName).Worksheets
   ' Other cool stuff goes here
Next

但最好立即明确,这样你就不必担心默认路径分隔符了 请记住,它并不总是\。所以我建议你在下面试试。

Dim myWB As Workbook
Set myWB = Workbooks.Open(strFileName)

Dim sheet As Worksheet
For Each sheet In myWB.Worksheets
    With Thisworkbook ' Explicitly refer to the workbook that contains the code
        sheet.Copy After:=.Sheets(.Sheets.Count)
    End With
Next

请记住,您需要使用ThisWorkbook代替ActiveWorkbook 为什么?因为当您打开其他工作簿时,当前打开的工作簿将变为ActiveWorkbook

因此,要将打开的工作簿中的所有工作表复制到包含代码的工作簿,请改用ThisWorkbook