我一直在研究一些代码,其中包含几个Do Until循环,但是当我运行它时,第一个循环按预期工作,但第二个循环和其他循环完全被绕过。
我已经在独立的子程序中运行了各个循环,并且它们可以根据需要运行。
我还检查过以前的帖子,似乎找不到同样问题的例子。
我最初尝试为第二个循环重新声明i = 2
,认为i
仍然有价值>比第一个循环中的lastRow
。
除此之外,我还尝试将变量从i
更改为j
以获得第二个循环,但这也没有区别。
这是我正在使用的代码示例:
Dim i As Long
i = 2
Do Until i > lastRow
Cells(i, 16).Select
If ActiveCell.Offset(rowOffset:=0, columnOffset:=-13) <> "Invoice" Then
ActiveCell = ""
ElseIf ActiveCell.Offset(rowOffset:=0, columnOffset:=-12) <> "" Then
ActiveCell = ""
ElseIf ActiveCell.Offset(rowOffset:=0, columnOffset:=-9) <> "Usage Actual" Then
ActiveCell = ""
ElseIf ActiveCell.Offset(rowOffset:=0, columnOffset:=-3) = "Final" Then
ActiveCell = ""
Else: ActiveCell. _
FormulaR1C1 = ' vlookup formula to data source
End If
i = i + 1
Loop
' Additional code to paste out formula and save work book
Dim j As Long
j = 2
Do Until j > lastRow
' from here the process skips right past the next loop to the Additional code to paste out formula and save work book noted below
Cells(j, 17).Select
If ActiveCell.Offset(rowOffset:=0, columnOffset:=-1) = "Yes" Then
ActiveCell.FormulaR1C1 = ' vlookup formula to data source
Else: ActiveCell = ""
End If
j = j + 1
Loop
' Additional code to paste out formula and save work book
我已经在这方面工作了好几天并且已经没有想法了。
答案 0 :(得分:1)
我终于设法让代码工作了。 我最终使用的方法涉及2次更改。
首先,我给每个循环它自己的Do Until变量 - 上面发布的代码以i作为第一个变量开始,下一个变为j,然后是k,依此类推。
在我在每个循环之间添加其他进程之前,它自己并没有解决问题。
例如,在第一个循环之后,我添加了代码以在另一列中执行查找并将该查找复制到lastRow但不使用循环来执行此操作。我在下一个循环中跟着它,然后使用更多的附加代码,也不需要循环来完成。
幸运的是,我有足够的额外进程来分解项目中的所有循环。虽然我仍然认为一个接一个地运行多个循环应该不是问题,但我还没有找到更有效的解决方案。