坚持循环。在它完成它的功能后,它继续前进

时间:2013-11-29 08:36:16

标签: excel vba excel-vba excel-2010

第一个代码用于查看数字20是否已经在B28到B47的空格中。如果是这种情况,我希望它继续下一步。如果数字20不存在,那么我希望它将数字添加到B47行,然后在完成之后结束。在添加数字20之后我试图让它停止的问题。我没有结束,它继续沿着专栏继续下去,因为它没有任何结果而增加了20多分。我一直试图创建的是一个循环,它首先检查所有单元格,如果找不到20则将其添加一次,而不是添加20次。

我之后的第二个代码就是尝试删除B28中的所有空行直到B47。但是,它没有这样做,并且跳过这个循环完全转移到Blargh3而不是。我试过为此创建循环,但Excel总是给我一个错误。在尝试过自己之后,我已经尝试过研究如何解决这个问题。我找不到任何帮助我的东西。

由于我对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

1 个答案:

答案 0 :(得分:2)

启用即时窗口 - > 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

第一个循环中的内容是

使用范围.Find中的B28:B47函数来查找值20.如果值在那里,那么循环的Else部分将执行,除了打印之外什么都不做消息到立即窗口已找到20。

这是20不存在的时候 enter image description here

如果找不到20(If is20There is Nothing评估为True),那么你可以执行你的代码,我想在B47添加一行(将最后一行向下移动)并用3号填充单元格一直到第65列,除了B列,你似乎将数字20分配给。

因此,如果20不存在,那么代码就什么都不做。

这是20岁时(没有发生

enter image description here


第二部分循环通过B28:B47向后(从结束开始到开始)并删除整行(如果其中任何一行为空(仅B列)

这是在

之前

enter image description here

然后运行代码

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

这是在

之后

enter image description here