运行时错误' 9' VBA

时间:2016-12-02 21:19:16

标签: excel-vba macros vba excel

我收到错误'下标超出范围'当我运行以下代码; debug将我指向最后一行:

Dim SrcBook As Workbook
Dim TrgBook As Workbook
Dim SrcSheet As Worksheet
Dim TrgSheet As Worksheet
Dim Sheet_Name As String

Workbooks.Open (CalendarFile)
Sheet_Name = MonthName(Month(SrcSheet.Cells(SrcRow, "D").Value), False)
MsgBox ("Sheet_Name Value is: " & Sheet_Name)
Set TrgSheet = Workbooks(CalendarFile).Worksheets(Sheet_Name)

我已多次验证CalendarFile是一个有效的文件名(我使用完整路径文件名)。 Sheet_Name也是该工作簿中工作表的有效名称。如果我尝试通过数字索引访问工作表,我会得到类似的错误[即工作簿(CalendarFile).Worksheets(11)vs Workbooks(CalendarFile).Worksheets(November)]。 MsgBox调用验证我正在为WorkSheets()方法提供正确的工作表名称。

最后,正确定义了ScrRow - 我能够使用此代码在同一个WorkBook中操作目标WorkSheets,因为在玩具/测试应用程序中调用了宏,但由于某种原因,当我尝试操作目标时它失败了其他(开放)WorkBooks中的WorkSheets。

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:1)

如果CalendarFile是有效的文件名,那就是您的问题。 Workbooks()所需的索引是Workbook.Name,而不是文件路径。例如,如果CalendarFileC:\Foo\Bar.xlsx,则需要使用Bar.xlsx

至于上面的解释,它确实无关紧要,因为你应该 真的 只是抓住Workbooks.Open返回的引用并且只是使用的是:

Set TrgBook = Workbooks.Open(CalendarFile)
Sheet_Name = MonthName(Month(SrcSheet.Cells(SrcRow, "D").Value), False)
MsgBox ("Sheet_Name Value is: " & Sheet_Name)
Set TrgSheet = TrgBook.Worksheets(Sheet_Name)

答案 1 :(得分:0)

找到解决方案,至少解决了这个问题:

Workbooks.Open (CalendarFile)

需要打开文件的完整路径名,但对文件的进一步引用只需要文件名 - 不附加任何路径。也就是说,

Workbooks(file_name_without_path.xlsx).Worksheets(Sheet_Name)

这非常烦人,应该修复。