在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天数添加到日期的主要内容,如果未能解决你的问题,请参考以下文章

而功能-根据变量迭代添加天/月,占每个月的最大天数

添加日期列vba

Access VBA中一列的总和

VBA 日期为整数

Access 和 VBA:在导入期间将日期添加到一列的所有值

js日期相减求天数 精确到秒