For 循环正在更改迭代器并在第一次迭代 VBA 后停止

问题描述

我对一系列列进行了简单的迭代,以将“-”字符串替换为空。 但是,它只进行第一次迭代,然后退出循环。 代码如下:

For i = 2 To ultimo
    StrEx = Workbooks(custodio).Sheets(1).Range("A" & i).Value
    StrEx = Replace(StrEx,"-","""")
    Workbooks(custodio).Sheets(1).Range("A" & i).Value = StrEx
Next i

其中 ultimo 是最后一行,custodio 是工作簿的名称i 值在循环内的第一行执行后发生变化,如果我将鼠标悬停在它上面,它会抛出一个值 454311

enter image description here

有什么想法吗?

解决方法

  1. 无需在每次迭代时检索工作簿和工作表。在进入循环之前更快地将工作表保存为变量
  2. i 需要声明为 Long(一个工作表可以有 1048576 行,而 Integer 是不够的)
  3. 无需每次都连接 "A"。您可以简单地使用第 1 列
  4. 您可以保存您读/写的单元格,这样您就不必两次检索它。更好的是,您可以使用 With 构造

试试这个解决上述问题的代码:

Dim sht As Worksheet
Dim i As Long

Set sht = Workbooks(custodio).Sheets(1)
For i = 2 To ultimo
    With sht.Cells(i,1) 'Instead of sht.Range("A" & i)
        .Value2 = Replace(.Value2,"-","""")
    End With
Next i

我不知道为什么你会像你的问题一样改变 i,但我希望看到你测试这段代码,看看它是否有效