Добавьте x количество дней к дате с vba в excel

Я пытаюсь добавить 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.

когда я запускаю это, я получаю (Googling, как это сделать, я устаю)

4 + I2 (где I2 = Friday, April 05, 2013) >> Wednesday, January 03, 1900

конечно, мне нужно Tuesday, April 09, 2013

спасибо

3 ответов


вы использовали


Я думаю, что этот код - это то, что вы после использования 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

хотя всего несколько пунктов:

  • функция input возвращает булево 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

вместо использования DateAdd, который требует больше ввода, вы также можете использовать DateValue. Следование сделает это.

DateValue(strUserResponse )+I2

другое решение будет использовать функцию преобразования, CDate.

CDate(strUserResponse )+I2