VBA 基于多列移动行

问题描述 投票:0回答:2

我正在尝试将基于日期的行移动到另一张纸。 代码有效并且行可以正确移动,但前提是所有字段都填写了日期。

  1. 我还想在一个或多个字段为空时移动该行,因此它只检查填充了 F-H 范围内日期的列。
  2. 有没有办法在一行代码中添加所有需要检查的列?而不是对每一列进行硬编码?

代码如下。 预先感谢。

        Sub MoveBasedOnValue5()
        lastrowcurrent = Sheets("Verlopen Keuring").Range("A" & Rows.Count).End(xlUp).Row
        lastrowpost = Sheets("Afgehandeld").Range("A" & Rows.Count).End(xlUp).Row
        For x = lastrowcurrent To 2 Step -1
        If Sheets("Verlopen keuring").Range("F" & x) >= Date And Sheets("Verlopen keuring").Range("G" & x) >= Date And Sheets("Verlopen keuring").Range("H" & x) >= Date Then
        Sheets("Verlopen keuring").Range("A" & x).EntireRow.Cut Sheets("Afgehandeld").Range("A" & lastrowpost + 1)
        Sheets("Verlopen keuring").Range("A" & x).EntireRow.Delete
        lastrowpost = lastrowpost + 1
    End If
Next
End Sub
excel vba excel-2010
2个回答
0
投票

您可以将

EVALUATE
用于工作表函数,如下所示:

If Evaluate("=if(or('Verlopen keuring'!F" & x & ":H" & x & ">=Now()),true,false)") Then

0
投票

您应该使用 OR IsEmpty():

Sub MoveBasedOnValue5()
    lastrowcurrent = Sheets("Verlopen Keuring").Range("A" & Rows.Count).End(xlUp).row
    lastrowpost = Sheets("Afgehandeld").Range("A" & Rows.Count).End(xlUp).row
    For x = lastrowcurrent To 2 Step -1
        If (Sheets("Verlopen keuring").Range("F" & x) >= Date Or IsEmpty(Sheets("Verlopen keuring").Range("F" & x)) _
            And (Sheets("Verlopen keuring").Range("G" & x) >= Date Or IsEmpty(Sheets("Verlopen keuring").Range("G" & x))) _
            And (Sheets("Verlopen keuring").Range("H" & x) >= Date Or IsEmpty(Sheets("Verlopen keuring").Range("H" & x)))) Then
                Sheets("Verlopen keuring").Range("A" & x).EntireRow.Cut Sheets("Afgehandeld").Range("A" & lastrowpost + 1)
                Sheets("Verlopen keuring").Range("A" & x).EntireRow.Delete
                lastrowpost = lastrowpost + 1
        End If
    Next
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.