从VBA中的日期减去?

时间:2011-08-08 18:42:05

标签: excel vba

我在使用Excel VBA中的日期操作时遇到大问题。 我有一个具有文本框的表单,用户将在其中输入日期。问题是他可能以不同的格式输入(例如,8月1日的1.08.2011,或同一天的8/1/11)。现在我想要做的是从他输入TextBox的那一天减去几天。到目前为止我不得不成功,我不知道该怎么做。 我试过这样的事情

Format((Format(Me.datalivrare.Value, "dd.mm.yyy") - 4), "dd.mm.yyyy")

其中datalivrare是用户输入日期的文本框,4是我想从该日期减去的天数...我希望格式始终为dd.mm.yyyy,无论他们输入的是什么那个文本框。

5 个答案:

答案 0 :(得分:26)

我建议查看VBA的DateAdd函数

http://www.techonthenet.com/excel/formulas/dateadd.php

http://office.microsoft.com/en-us/access-help/dateadd-function-HA001228810.aspx

您可以执行以下操作:

Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy")

答案 1 :(得分:6)

最好在vba上添加和减去日期dateadd()(带有负数的减法) 此外,在您的示例代码中,格式字符串上缺少y(仅接受1,2或4 y)

答案 2 :(得分:6)

首先转换为日期,然后减去天数,然后适当格式化:

Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy")

答案 3 :(得分:1)

重要的是检查用户是否输入了VBA可以作为日期插入的值,所以首先应该:

If isDate(Me.datalivrare.Value) Then
    str_Date = Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy")
Else
    MsgBox "Not a valid date value", vbCritical + vbOkOnly, "Invalid Entry"
End If

我认为bluefeet的答案到目前为止获得的信息最多,我借用了DateAdd和CDate。

答案 4 :(得分:0)

只是一个简单的答案,因为很多人没有使用 OP 的代码。

例如:减去 4 天

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dateadd-function

Sub DateTest()
 Dim DateVar As Date
 DateVar = DateAdd("d", -4, Date)
 Debug.Print DateVar
End Sub