-4

我在工作簿中有两列;第一个有今天的日期,第二个有未来的日期。我想创建一个 VBA 来比较这两列并验证未来日期是否比今天提前三个工作日。如果日期不是比今天提前三个工作日,我想显示一条警告消息。

有没有办法做到这一点?非常感谢。

4

3 回答 3

2

首先,您需要了解 VBA 如何“理解”日期。

Excel、Access、VBA 和许多 MS 产品将日期存储为双精度数字;数字的整数部分是日期(自 1900 年 1 月 1 日起计算的天数),数字的小数部分是时间(天的小数部分)。

这使得比较两个日期变得容易:您可以像使用数字一样比较、添加或减去日期。因此,如果t0t1是两个日期 ( t1 >= t0),则表达式t1 - t0将为您提供天差。

现在...如何计算两个日期之间的“工作日”?format()VBA 中的函数可以帮助您。您可以使用此函数返回“星期几”数字。查看该功能的在线帮助:http: //msdn.microsoft.com/en-us/library/office/gg251755.aspx

那么......你怎么把它放在一起?这是一个例子:

public function bizDaysRemaining(t0 as date, t1 as date) as String
    Dim ans As String, dayCount as Integer, n as Integer
    If t1 < t0 Then
        ans = "Warning"
    Else
        dayCount = 0
        n = 0
        While t0 + n <= t1
            if format(t0 + n, "w", vbMonday) <= 5 Then dayCount = dayCount + 1
            n = n + 1
        Wend
        If dayCount < 3 Then
            ans = "Warning"
        Else
            ans = "There are " & dayCount & " business days remaining"
        End If
    End IF
    bizDaysRemaining = ans
End Function

希望这可以帮助你

于 2013-07-23T16:45:33.940 回答
1

此外,不需要使用 VBA。Excel 将允许您将日期视为数学对象,并且日期周围还有多个公式函数。

查看 NETWORKDAYS() 函数。

http://office.microsoft.com/en-us/excel-help/networkdays-HP005209190.aspx

于 2013-07-23T17:56:14.737 回答
0

尝试这个:

假设 A1 = 第一次约会

A2 = 第二个日期

Sub xtremeexcel()

x = Cells(1, 2) - Cells(1, 1)

If x > 3 Then

  If Weekday(Cells(1, 1)) <= 2 Then

   MsgBox ("Success")

  Else

    If x > 5 Then

        MsgBox ("Success")

    Else

        MsgBox ("fail")

    End If

  End If

Else

    MsgBox ("fail")

End If


End Sub
于 2013-07-23T18:49:18.960 回答