首页 > 解决方案 > 在 VBA 中使用“And _”避免嵌套 IF

问题描述

我试图避免嵌套 IF 语句,但下面的代码给了我一个错误。只有当我有第一行时才会出现错误。没有它,另一个“和_”可以完美地工作。我无法理解为什么!作为背景,此代码的目的是检查日期的格式是否正确(dd/mm/yyyy)并且发生在 2020 年之后。任何帮助将不胜感激!

此代码不起作用:

Public ValidPaymentDate As Boolean
Public ArrInput_PaymentDate As Variant

ArrInput_PaymentDate = Split(PaymentDate.Value, "/") 

If (UBound(ArrInput_PaymentDate) = 2) And _ ' ***Here is the issue!!!***
    ArrInput_PaymentDate(0) > 0 And ArrInput_PaymentDate(0) <= 31 And _
    ArrInput_PaymentDate(1) > 0 And ArrInput_PaymentDate(1) <= 12 And _
    ArrInput_PaymentDate(2) >= 20 And ArrInput_PaymentDate(2) < 100 Then
    ValidPaymentDate = True
End If

此代码有效(但我想避免嵌套 If 语句):

Public ValidPaymentDate As Boolean
Public ArrInput_PaymentDate As Variant

ArrInput_PaymentDate = Split(PaymentDate.Value, "/") 

If (UBound(ArrInput_PaymentDate) = 2) Then
    If ArrInput_PaymentDate(0) > 0 And ArrInput_PaymentDate(0) <= 31 And _
    ArrInput_PaymentDate(1) > 0 And ArrInput_PaymentDate(1) <= 12 And _
    ArrInput_PaymentDate(2) >= 20 And ArrInput_PaymentDate(2) < 100 Then
    ValidPaymentDate = True
    End If
End If

标签: vba

解决方案


你有一个不属于那里的额外括号

If (UBound(ArrInput_PaymentDate) = 2 And _ ' ***Here is the issue!!!***
    ArrInput_PaymentDate(0) > 0 And ArrInput_PaymentDate(0) <= 31 And _
    ArrInput_PaymentDate(1) > 0 And ArrInput_PaymentDate(1) <= 12 And _
    ArrInput_PaymentDate(2) >= 20 And ArrInput_PaymentDate(2) < 100) Then
    ValidPaymentDate = True
End If

推荐阅读