陷入一个循环。 它履行了它的function后继续前进

第一个代码是在那里,看看数字20是否已经在空间B28到B47。 如果是这样的话,我希望它继续下一步。 如果数字20不在那里,那么我想把它添加到B47行,然后在完成之后结束。 我有问题试图让它停止后,它添加了20号。而不是结束,它继续下来,并增加了20多个由于它没有finidng任何。 我一直试图创build一个循环,首先检查所有的单元格,如果它没有find20,它会添加一次,而不是添加20次。

我之后的第二个代码是试图删除B28中的所有空行直到B47。 然而,它并没有这样做,并跳过这个完全转向Blargh3的循环。 我曾尝试为此创build循环,但Excel一直给我一个错误。 我已经尝试过研究如何在我尝试过自己之后修复它。 我无法find任何帮助我的东西。

由于我对VBA相当陌生,不胜感激。

For Each Cell In Worksheets("Sheet1").Range("B28:B48") If Cell.Value > 19 Then GoTo Blargh2 Else: Range("B" & 47, "BM" & 47).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("B" & 47) = 20 Dim a As Long For a = 3 To 65 Cells(47, a) = 3 Next End If Next Blargh2: For Each Cell In Worksheets("Sheet1").Range("B28:B47") If Cell.Value = 0 Then Row.Delete X1DeleteShiftUp Else: GoTo Blargh3 End If Next Blargh3: Dim i As Long For i = 47 To 29 Step -1 If Range("B" & i) - Range("B" & i).Offset(-1, 0) > 1 Then Range("B" & i, "BM" & i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("B" & i) = Range("B" & i).Offset(1, 0) - 1 Dim c As Long For c = 3 To 65 Cells(i, c) = 3 Next i = i + 1 End If Next 

打开即时窗口 – > ctrl + g或在菜单栏中点击View => Immediate Window

这将是基于你的逻辑的第一部分

 Sub FirstPart() Dim is20There As Range With Range("B28:B47") Set is20There = .Find(What:="20", LookIn:=xlValues, lookat:=xlPart) End With If is20There Is Nothing Then Debug.Print "20 is not there, executing your code now" Range("B" & 47, "BM" & 47).Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("B" & 47) = 20 Dim a As Long For a = 3 To 65 Cells(47, a) = 3 Next Else Debug.Print "exiting because 20 is there" End If End Sub 

在第一个循环中发生的是

使用范围B28:B47.Find函数来查找值20.如果值在那里,那么循环的Else部分将执行,它只是简单地不做任何事情,而是将消息打印到find20的立即窗口。

这是20时不在那里 在这里输入图像说明

如果没有find20( If is20There is Nothing评估为True ),那么你可以执行你的代码,我猜想在B47增加一行(向下移动最后一行),并填充单元格3到第65列你似乎分配了20号的B列。

所以,如果20不在那里,那么代码从字面上什么都不做。

这是20时在那里( 没有任何反应

在这里输入图像说明


第二部分通过B28:B47向后循环(从结尾开始到开始),如果它们中的任何一个都是空的,则删除整行(仅列B)

这是之前

在这里输入图像说明

然后运行代码

 Sub SecondPart() Dim i As Long Dim cell As Range For i = 47 To 28 Step -1 Set cell = Range("B" & i) If IsEmpty(cell) Then Rows(cell.Row & ":" & cell.Row).Delete shift:=xlUp End If Next i End Sub 

这是之后

在这里输入图像说明