处理 运行 时间错误“9”:遍历工作表时下标超出范围

Dealing with Run-time error '9': Subscript out of range when iterating over Worksheet

不是 Excel/VB 专家,但我不断得到

Run time error: 9: Subscript out of range

错误发生在 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

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