不是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
答案 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
。