0

如果它们在 B 列中包含“CL”,我试图将行剪切到一个范围之外,然后将剪切插入另一个工作表。它做得很好,但如果 B 列不包含“CL”,它将在电子表格中插入一个空白行,而不是什么都不做。我不确定它为什么要插入空白行?这是代码

With Sheets("Data")
    .Select
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    .DisplayPageBreaks = False
    Firstrow = .UsedRange.Cells(1).Row
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
    For Lrow = Lastrow To Firstrow Step -1
        With .Cells(Lrow, "B")

            If Not IsError(.Value) Then

                    If .Value = "CL" Then .EntireRow.Cut
                        Sheets("Sheet1").Select
                        Rows("10:10").Select
                        Selection.Insert Shift:=xlDown

               End If

           End With

       Next Lrow

   End With

End Sub
4

1 回答 1

3

只有当你击中 CL 时,你才会做EntireRow.Cut,但你总是在做插入(即使你没有找到 CL)。

您的缩进使乍一看就像您正在有条件地进行剪切、选择和插入,但实际上您使用的是单行 if 表单。在这种形式中,只有then通过行尾的部分是有条件的;后续行没有条件。

如果我更正您的缩进,这就是您所拥有的:

With .Cells(Lrow, "B")
    If Not IsError(.Value) Then
        If .Value = "CL" Then .EntireRow.Cut     '<--- this is a single-line if

        Sheets("Sheet1").Select                  '<--- this, and the next two lines, will always run if .Value is not an error value
        Rows("10:10").Select
        Selection.Insert Shift:=xlDown
    End If  
End With

尝试使用多行if

With .Cells(Lrow, "B")
    If Not IsError(.Value) Then
        If .Value = "CL" Then
            .EntireRow.Cut     '<--- everything from here to the "End If" will run when you hit a CL
            Sheets("Sheet1").Select
            Rows("10:10").Select
            Selection.Insert Shift:=xlDown
        End If
    End If
End With
于 2013-07-02T19:50:57.670 回答