VBA:通过variables名称打开工作表

我打算从工作表“2015”中复制从我的计算机上的文件夹导入的工作簿中的一些值。

我的代码如下所示:

Sub test() Dim myHeadings() As String Dim p3file As String Dim currentWb As Workbook Dim openWb As Workbook Dim openWs As Worksheet Set currentWb = ActiveWorkbook myHeadings = Split("Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December", ",") path3 = Dir("C:\pathtofile\filename" & ".xlsx") p3file = "C:\pathtofile\" 'Dir doesn't return path YearNo = Year(Date) Do While Len(path3) > 0 Set openWb = Workbooks.Open(p3file & path3) For i = 0 To UBound(myHeadings) Set openWs = openWb.Sheets(YearNo) If Err.Number <> 0 Then 'Attempt to exit while loop if sheet does not exist Exit Do Else 'Copy a bunch of data End if Next i path3 = Dir("C:\pathtofile\filename" &".xlsx") Loop Workbooks(openWb.name).Close End Sub 

我已经debugging通过在循环内MsgBoxes,我可以得出结论,程序进入For i = …循环,但遇到

  Set openWs = openWb.Sheets(YearNo) 

给出“下标超出范围”的错误。 通过做MsgBoxes我见过,迪尔find正确的文件。 “p3file&path3”返回包含path名的正确文件。 我已经testing在开始的表格代码中添加“”年号“”。 工作表名称被称为“2015”(不含引号)。 有没有人对此有任何线索?

提前致谢

这是因为YearNo存储为一个数字,而不是文本。

表格集要求索引号或包含要打开的表的名称的string。 在你的情况下,你正在提供一个数字,所以代码认为你要索引表索引2015年,因此超出范围的错误。

你需要告诉Excel,你正在使用的是使用CStr转换数字的文本: –

 Set openWs = openWb.Sheets(CStr(YearNo));