【发布时间】:2013-07-24 02:49:18
【问题描述】:
我的工作簿中有两列;第一个有今天的日期,第二个有未来的日期。我想创建一个 VBA 来比较这两列并验证未来日期是否比今天提前 三个工作日。如果日期不是比今天早三个工作日,我想显示一条警告消息。
有没有办法做到这一点?非常感谢。
【问题讨论】:
-
您应该先尝试解决您的问题并发布您的编码尝试。
我的工作簿中有两列;第一个有今天的日期,第二个有未来的日期。我想创建一个 VBA 来比较这两列并验证未来日期是否比今天提前 三个工作日。如果日期不是比今天早三个工作日,我想显示一条警告消息。
有没有办法做到这一点?非常感谢。
【问题讨论】:
首先,您需要了解 VBA 如何“理解”日期。
Excel、Access、VBA 和许多 MS 产品将日期存储为双精度数字;数字的整数部分是日期(从 1900 年 1 月 1 日开始计算的天数),数字的小数部分是时间(天的小数部分)。
这使得比较两个日期变得容易:您可以像使用数字一样比较、添加或减去日期。所以,如果t0 和t1 是两个日期(t1 >= t0),那么表达式t1 - t0 将给出日期的差异。
现在...如何计算两个日期之间的“工作日”? VBA 中的format() 函数可以帮助您。您可以使用此函数返回“星期几”数字。
查看函数的在线帮助: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
希望对你有帮助
【讨论】:
另外,不需要使用 VBA。 Excel 将让您将日期视为数学对象,并且日期周围还有多个公式函数。
查看 NETWORKDAYS() 函数。
http://office.microsoft.com/en-us/excel-help/networkdays-HP005209190.aspx
【讨论】:
试试这个:
假设 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
【讨论】: