第二遍循环后,下标超出范围

时间:2020-08-06 14:02:25

标签: excel vba

我正在一个项目中,它将找到一个csv文件,将其打开,拉出特定的列,然后将其转置到打开的工作簿中的特定位置,然后移至列表中的下一个文件名。当前,该代码在前两个循环中有效,但是在下面的代码中被卡在“ Workbooks(fname).Activate”上。我已经知道由于ActiveCell.Offset一旦通过第二个循环运行,就会发生该错误,但是我无法弄清楚为什么它会在前两个循环中起作用然后停止。任何帮助将不胜感激!

Sub x1853_Get_ALL_Dim3()

    Dim fname As String
    Dim Name As String
    Dim Path As String
    Dim Path2 As String
    
    Sheets("Sheet1").Select
    
    Range("A6").Select
    
    Do Until ActiveCell.Value = ""
    
    fname = Path2 & ActiveCell.Value
    
      Path = ThisWorkbook.Path
     Path2 = Path & "\Pull\"
    ChDrive Path2
    ChDir Path2
    
   Name = ThisWorkbook.Name
    
 Application.ScreenUpdating = False
    
    Workbooks.Open Filename:=fname, Local:=True
    ActiveWindow.SmallScroll Down:=0
    Range("B3:B300").Select
    ActiveWindow.SmallScroll Down:=-15
    Selection.Copy
    
    Workbooks(Name).Activate
    ActiveCell.Offset(0, 2).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Workbooks(fname).Activate
    Application.CutCopyMode = False
    ActiveWorkbook.Close SaveChanges:=False
    ActiveCell.Offset(0, -2).Range("A1").Select
    
    ActiveCell.Offset(1, 0).Select
    
    Loop
      
Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:1)

size_t返回您应该捕获的工作簿引用。更改:

Workbooks.Open

Workbooks.Open Filename:=fname, Local:=True

,然后引用Dim wb As Workbook Set wb = Workbooks.Open(Filename:=fname, Local:=True) 而不是wb

也许更重要的是,您应该看到How to avoid using Select并相应地修改代码。