处理运行时错误“9”:在工作表上迭代时,下标超出范围

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

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

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

工作簿strFileName正在成功打开,工作簿包含两个其他工作表,但代码在下一行失败。 我已经看到类似的post,类似的问题,但没有任何运气。 任何build议将是伟大的。 (我正在使用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包含工作簿的完整path。
所以你不能在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 

但是马上显式更好,所以你不必担心默认的path分隔符。
请记住,它并不总是\ 。 所以我build议你在下面尝试。

 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