比较VBA变量中的日期

时间:2017-07-20 10:29:43

标签: vba date variant

我遇到了一些有趣的代码问题。我试图找到3个变体之间的最大值(日期),但它并没有很好地工作。

以下是代码;

If CountValues(WA1, WA2, WA3) <> CountValues(WS_1, WS_2, WS3) Then

    MAX_DATE = ""
        Else

If WA1 = "" Then
WA1 = "01.01.1990"
End If
If WA2 = "" Then
WA2 = "01.01.1990"
End If
If WA3 = "" Then
WA3 = "01.01.1990"
End If
            If WA1 >= WA2 And WA1 >= WA3 Then
                MAX_DATE = WA1
            Else
                If WA2 >= WA3 And WA2 >= WA1 Then
                    MAX_DATE = WA2
                Else
                    If WA3 >= WA2 And WA3 >= WA1 Then
                        MAX_DATE = WA3



End If
End If
End If
End If

现在WA1等于13.11.2017,WA2和WA3为空。 WS_1有一个值,但其他人没有,所以第一次检查是有效的。它们显示为&#34; WA2 =&#34;&#34; &#34;在F8检查。但是,MAX_DATE仍然表示第二个If函数为真,所以它转到WA2,这是什么,但它应该给出WA1值。

有什么想法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这是由于比较方法。空字符串是&#34; less&#34;任何字符串。尝试以下解决方案:

为这些变量分配一些值,以便程序可以比较它,不要将它留空。使用一些默认值(例如,非常旧的日期,不会改变最大值,如1900-01-01)。而且,正如我昨天在回答您的同一问题时所说的那样,使用Date类型,因此程序知道如何比较它。如果您将日期存储为Variants,则比较可能会返回错误的结果(您将字符串传递给这些变量,因此程序将应用字符串比较,如果它们是Variant并将它们作为比较日期,如果它们存储为Date)。

此外,确定最大值可能会稍微简单一些:

MAX_DATE = WA3
If WA1 > WA2 Then
    If WA1 > WA3 Then MAX_DATE = WA1
Else
    If WA2 > WA3 Then MAX_DATE = WA2
End If