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

更新了vba代码,但仍然给了我一个下标超出范围的错误,vba,csv,excel,range,Vba,Csv,Excel,Range,这段代码仍然给我一个下标外错误 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

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

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。选择。

在分配工作表时,您肯定应该在行上设置

Set sh1 = Worksheets(filenum(lngPosition))

如果所需文件尚未打开,
下标超出范围
将在该行引发

由于您似乎不太可能已经打开了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

一个技巧是删除On Error GoTo语句;这将显示哪一行导致错误,并更好地指示哪些行不起作用。同意Richard。。。。这不是错误处理程序,而是错误的完成消息。此外,我将删除您的所有.Select和Selection。和。激活引用。当您在Excel中创建宏时,它默认使用这种语言,但这是非常糟糕的编码。例如,您的sh1.Activate、Range(“A69”).Select和ActiveSheet.Paste行可以替换为sh1.Range(“A69”).Paste。一旦你把它清理干净并删除你的错误线路,你就可以正确地调试了。。这确实有帮助,谢谢你的提示。我在代码中做了更改。因此,现在我得到一条消息,文件052.csv找不到。此excel文件(带有脚本)与文件052.csv本身位于同一位置。它在这一行上给我一个运行时错误1004:Workbooks.Add(filenum(lngPosition)和“.csv”)。激活表示可以找到该文件该文件是否已在excel中打开?还是你想在代码中打开它?谢谢。。这是一个重复的问题:)这是我第三次看到这段代码。。。这将打开文件,然后在下一行显示下标外错误:wb2.Worksheets(filenum(lngposition)).rng.Copy wb.Worksheets(filenum(lngposition)).rng2.paste两个工作簿(
wb
wb2
)都包含一个工作表,该工作表与
filenum(lngposition)
定义的名称完全对应。。两个工作簿的工作表都命名为052,以此类推