VBA:按变量名称打开工作表

时间:2015-03-20 12:14:37

标签: excel vba excel-vba

我打算从工作表“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”(不带引号)。有没有人对此有任何线索?

提前致谢

1 个答案:

答案 0 :(得分:3)

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

Sheets Collection要求索引编号或包含要打开的工作表名称的字符串。在你的情况下,你提供一个数字,所以代码认为你要求索引2015的表格,因此超出范围错误。

您需要告诉Excel您使用的2015是使用CStr转换数字的文本: -

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