繁体   English   中英

VBA:通过变量名称打开工作表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM