我打算从工作表“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
我通过在循环中创建MsgBox来调试我可以得出结论,程序进入For i = ...循环,但遇到
Set openWs = openWb.Sheets(YearNo)
给出“下标超出范围”错误。通过做MsgBoxes我已经看到Dir找到了正确的文件。 “p3file&amp; path3”返回包含路径名的正确文件。我已经测试了在开场表单代码中添加“”年份周围的“”。工作表名称称为“2015”(不带引号)。有没有人对此有任何线索?
提前致谢
答案 0 :(得分:3)
这是因为YearNo存储为数字,而不是文本。
Sheets Collection要求索引编号或包含要打开的工作表名称的字符串。在你的情况下,你提供一个数字,所以代码认为你要求索引2015的表格,因此超出范围错误。
您需要告诉Excel您使用的2015是使用CStr转换数字的文本: -
Set openWs = openWb.Sheets(CStr(YearNo));