处理 运行 时间错误“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
。
不是 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
。