更新了VBA代码,仍然给我一个下标超出范围的错误

这段代码仍然给我一个下标错误

Sub importData2() ChDir "C:\Users\Desktop\Java" Dim filenum(0 To 10) As Long filenum(0) = 052 filenum(1) = 060 filenum(2) = 064 filenum(3) = 068 filenum(4) = 070 filenum(5) = 072 filenum(6) = 074 filenum(7) = 076 filenum(8) = 178 filenum(9) = 180 filenum(10) = 182 Dim sh1 As Worksheet Dim rng As Range Set rng = Range(Selection, ActiveCell.SpecialCells(xlLastCell)) Dim wb As Workbook Set wb = Application.Workbooks("30_graphs_w_Macro.xlsm") Dim sh2 As Worksheet Dim rng2 As Range Set rng2 = Range("A69") Dim wb2 As Workbook For lngposition = LBound(filenum) To UBound(filenum) Set wb2 = Application.Workbooks.Open(filenum(lngposition) & ".csv") wb2.Worksheets(filenum(lngposition)).rng.Copy wb.Worksheets(filenum(lngposition)).rng2.Paste Next lngposition my_handler: MsgBox "All done." End Sub 

这仍然给我一个下标错误的线上:

 Set wb2 = Application.Workbooks(filenum(lngposition) & ".csv") 

我避免使用.active和.select。 。select。

如果所需的文件尚未打开,下Subscript out of Range将在该行上提升。

由于看起来不太可能已经打开了11个文件,因此可能需要使用Open方法在循环中打开必要的工作簿。

Set wb2 = Application.Workbooks.Open(filenum(lngposition) & ".csv")

更新你的代码

 Sub importData2() ChDir "C:\Users\Desktop\Java" Dim filenum(0 To 10) As String Dim wb As Workbook Dim sh1 As Worksheet Dim rng As Range Dim wb2 As Workbook Dim sh2 As Worksheet Dim rng2 As Range filenum(0) = "052" filenum(1) = "060" filenum(2) = "064" filenum(3) = "068" filenum(4) = "070" filenum(5) = "072" filenum(6) = "074" filenum(7) = "076" filenum(8) = "178" filenum(9) = "180" filenum(10) = "182" '## What workbook is this referring to?? This might cause problems later... Set rng = Range(Selection, ActiveCell.SpecialCells(xlLastCell)) Set rng2 = Range("A69") Set wb = Application.Workbooks("30_graphs_w_Macro.xlsm") For lngposition = LBound(filenum) To UBound(filenum) Set wb2 = Application.Workbooks.Open(filenum(lngposition) & ".csv") Set sh1 = wb.Worksheets(filenum(lngposition)) Set sh2 = wb2.Worksheets(1) 'A CSV file only has 1 worksheet. sh2.rng.Copy Destination:=sh1.Range(rng2.Address) Next lngposition my_handler: MsgBox "All done." End Sub 

当您分配工作表时,您应该确定已Set

 Set sh1 = Worksheets(filenum(lngPosition))