[英]VBA: Opening a worksheet by variable name
我打算从工作簿中复制一些值,该工作簿是从计算机上的文件夹(工作表“ 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
我已经通过在循环内创建MsgBoxes进行调试,我可以得出结论,程序进入了For i = ...循环,但是当遇到
Set openWs = openWb.Sheets(YearNo)
给出“下标超出范围”错误。 通过执行MsgBoxes,我已经看到Dir找到了正确的文件。 “ p3file&path3”返回正确的文件,包括路径名。 我已经测试了在开幕表代码的YearNo周围添加“”。 工作表名称称为“ 2015”(不带引号)。 有人对此有任何线索吗?
提前致谢
这是因为YearNo存储为数字而不是文本。
图纸集要求输入一个索引号或一个包含要打开的图纸名称的字符串。 在您的情况下,您要提供一个数字,因此代码认为您要的是索引为2015的工作表,因此出现了超出范围的错误。
您需要通过使用CStr转换数字来告诉Excel您正在使用的2015是文本:-
Set openWs = openWb.Sheets(CStr(YearNo));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.