Excel 尝试修复VBA中的Do While循环
提前感谢您抽出时间来帮忙。我在VBA中构建了一个Do While循环,由于某些原因,当j=1时该循环会中断。我在C3:C7单元格中有这些值:13,14,14,13,14 以下是简短的脚本:Excel 尝试修复VBA中的Do While循环,excel,vba,Excel,Vba,提前感谢您抽出时间来帮忙。我在VBA中构建了一个Do While循环,由于某些原因,当j=1时该循环会中断。我在C3:C7单元格中有这些值:13,14,14,13,14 以下是简短的脚本: Dim i, j, n As Integer Dim List(0) As Integer i = o j = 0 n = 0 Do While Cells(i + 3, 3) <> "" If Cells(i + 3, 3) > 13 Then Li
Dim i, j, n As Integer
Dim List(0) As Integer
i = o
j = 0
n = 0
Do While Cells(i + 3, 3) <> ""
If Cells(i + 3, 3) > 13 Then
List(j) = i + 3
j = j + 1
Cells(i + 3, 4) = "Noted"
i = i + 1
ElseIf Cells(i + 3, 3) = 13 Then
Cells(i + 3, 4) = "Skipped"
i = i + 1
Else
i = i + 1
End If
Loop
For n = j To n = 0
Rows(List(n)).Delete
Next
Dim i,j,n为整数
Dim列表(0)为整数
i=o
j=0
n=0
“当单元格(i+3,3)”时执行”
如果单元格(i+3,3)>13,则
列表(j)=i+3
j=j+1
单元格(i+3,4)=“已注明”
i=i+1
ElseIf细胞(i+3,3)=13
单元格(i+3,4)=“跳过”
i=i+1
其他的
i=i+1
如果结束
环
对于n=j到n=0
行(列表(n))。删除
下一个
再次感谢 你的意图是正确的,但也有不少错误。有关详细信息,请参见下面的注释代码
Sub Demo()
' ~~ must explicitly type each variable. Use Long
Dim i As Long, j As Long, n As Long
Dim List() As Long '<~~ dynamic array
i = 3 '<~~ eliminate the klunky +3
j = 0
n = 0
ReDim List(0 To 0) '<~~ initialise dynamic array
Do While Cells(i, 3) <> vbNullString
If Cells(i, 3) > 13 Then
ReDim Preserve List(0 To j) '<~~ resize array
List(j) = i
j = j + 1
Cells(i, 4) = "Noted"
ElseIf Cells(i, 3) = 13 Then
Cells(i, 4) = "Skipped"
End If
i = i + 1 '<~~ simplify, its called in each if case anyway
Loop
' j will end up 1 greater than size of array
If j > 0 Then '<~~ only execute if we found some rows to delete
For n = j - 1 To 0 Step -1 '<~~ For loop syntax
Rows(List(n)).Delete
Next
End If
End Sub
子演示()
“~~必须显式键入每个变量。使用长
暗i为长,j为长,n为长
Dim List(),只要“将列表声明为一个数组,其中一个元素从零开始。一旦j=1,它就超过了上限。这不是零i=o
(第4行)不是答案,而是Dim i,j,n作为整数
实际上声明i作为变量,j作为变量,n作为整数
。如果希望将所有变量声明为Integer
,则需要这样做:Dim i为Integer,j为Integer,n为Integer
,谢谢Phil-捕捉得好。维克多,很高兴知道。我没有意识到这一点。谢谢分享。SJR,是的,这似乎是个问题。我本以为包括List(j)=I+5会添加一个实例/索引,并将List()的上限增加1(每次我增加j)。在我的其他回路中似乎也是如此。如果条件满足,我是否应该在每次增加数组上限时都包括一些内容?谢谢,Chris。这就是诀窍——一点一点地测试它,ReDim Preserve List(0到j)就是专门做这个诀窍的。非常感谢您重新编写sub,使其更干净、结构更好。我学到的比我想象的要多。再次感谢!