在excel中使用vba将x天数添加到日期
Posted
技术标签:
【中文标题】在excel中使用vba将x天数添加到日期【英文标题】:Add x number of days to a date with vba in excel 【发布时间】:2013-04-21 23:15:54 【问题描述】:我想用弹出框将 x 天数添加到长日期。
Public Function AskForDeadlinePlus4() As String
Dim strUserResponse As String
strUserResponse = InputBox("Enter Validuntil Date: Add # of Days To Survey end date")
strUserResponse = FormatDateTime(strUserResponse + I2, vbLongDate)
ActiveSheet.Cells(2, 10).Value = strUserResponse 'the 2, 10 is the cell reference for J2 - row 2, column 10.
End Function
I2 单元格中的调查结束日期。
当我运行这个时,我得到(谷歌搜索如何做到这一点我很累)
4 + I2
(其中I2 = Friday, April 05, 2013
)>> Wednesday, January 03, 1900
当然我需要Tuesday, April 09, 2013
谢谢
【问题讨论】:
strUserResponse = FormatDateTime(DateAdd(d, strUserResponse, Range("I2")), vbLongDate)
- techonthenet.com/excel/formulas/dateadd.php
您好,蒂姆,我尝试了您的 sugention,我收到错误“无效的过程调用或参数”,不知道如何解决我在另一个 sub 的末尾这样调用我,调用 AskForDeadlinePlus4,它适用于原来的
另外,如果我将 DateAdd(d, strUserResponse, Range("I2"))
更改为 DateAdd("d", strUserResponse, Range("I2"))
,那么我会得到“2012 年 4 月 4 日,星期三”+4 >>“1900 年 1 月 3 日,星期三”的日期输出
【参考方案1】:
你用过DateAdd
函数吗?
Sub DateExample()
Dim strUserResponse As String '## capture the user input'
Dim myDate As Date '## the date you want to add to'
Dim numDays As Double '## The number of days you want to add'
strUserResponse = InputBox("Enter Validuntil Date: Add # of Days To Survey end date")
numDays = InputBox("How many days to add?")
myDate = CDate(strUserResponse)
MsgBox DateAdd("d", numDays, myDate)
End Sub
【讨论】:
myDate = CDate("d", CInt(strUserResponse, Range("I2"))
不是更好吗,因为 strUserResponse 是要添加到单元格 I2 中包含的日期的天数?
日期存储为 long
值,因此从技术上讲,像 1.5
这样输入的值不会导致错误,但像 "steven"
这样的任何非数字值都会导致 mismatch
错误。对于一个强大的解决方案,是的,最终你需要添加一些逻辑来确保用户传递允许的输入,但这不是你问的问题:)
你好,大卫,这里有 2 个蒂姆,我是发布问题的人。如何将输出添加到单元格 J2 我试过 ActiveSheet.Cells(2, 10).Value = myDate
但我得到了没有添加天数的原始日期。我想使用其他蒂姆的建议(正如我想说的那样),但这也不起作用。如果我添加 myDate = CDate("d", CInt(strUserResponse, Range("I2"))
它会变成红色并显示“预期编译错误:)”感谢两者
试试ActiveSheet.Cells(2,10).Value = DateAdd("d", numDays, myDate)
感谢大卫,我使用了:ActiveSheet.Cells(2, 10).Value = FormatDateTime(DateAdd("d", numDays, myDate), vbLongDate)【参考方案2】:
我认为这段代码是你使用DateAdd(<base e.g. Day = "D">, <number>, <date>)
函数后的代码:
Public Function AskForDeadlinePlus4() As String
Dim strUserResponse As Date, iNumber As Long, rResponse As Variant
AskForDeadlinePlus4 = "" 'set default value
iNumber = CLng([I2])
rResponse = InputBox("Enter Validuntil Date: Add " & iNumber & " Day(s) To Survey end date")
If rResponse = False Then
'no value entered
Exit Function
ElseIf Not IsDate(rResponse) Then
'no date entered
Exit Function
Else
'valid date entered
strUserResponse = DateAdd("D", iNumber, CDate(rResponse))
End If
AskForDeadlinePlus4 = FormatDateTime(strUserResponse, vbLongDate)
End Function
不过只有几点:
如果没有输入,输入函数将返回布尔值FALSE。 你上面使用的测试是一个函数,使用时会返回一个值 如果你想在另一个VBA代码中使用,i = AskForDeadlinePlus4
是它的用法;
但您也可以在单元格中使用它,但仅在必要时,因为每次计算都会提示输入,并且对于每个单元格,=AskForDeadlinePlus4
;和
此外,我还添加了一项检查以查看是否输入了日期,因为用户可能输入的日期无效。
如果你想在 VBA 中使用:
Sub GetInfo()
'the 2, 10 is the cell reference for J2 - row 2, column 10.
ActiveSheet.Cells(2, 10).Value = AskForDeadlinePlus4
End Sub
【讨论】:
您好 glh,感谢您的代码,当我运行它时,我收到错误“类型不匹配”,不知道如何修复它。谢谢 一旦开始运行【参考方案3】:您也可以使用 DateValue,而不是使用需要更多输入的 DateAdd。下面就可以了。
DateValue(strUserResponse )+I2
另一种解决方案是使用转换函数 CDate。
CDate(strUserResponse )+I2
【讨论】:
以上是关于在excel中使用vba将x天数添加到日期的主要内容,如果未能解决你的问题,请参考以下文章