首页 > 解决方案 > 第二次循环后下标超出范围

问题描述

我正在做一个项目,该项目将找到一个 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

标签: excelvba

解决方案


Workbooks.Open返回您应该捕获的工作簿引用。改变:

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

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:=fname, Local:=True)

然后参考wb而不是Workbooks(fname)

也许更重要的是,您应该了解如何避免使用 Select并相应地修改您的代码。


推荐阅读