web-dev-qa-db-fra.com

Ajouter x nombre de jours à une date avec vba dans Excel

Je suis tring pour ajouter x nombre de jours à une longue date avec une boîte pop-up.

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

Date de fin de l'enquête dans la cellule I2.

Quand je lance ça, je suis fatigué (googler comment faire cela)

4 + I2 (où I2 = Friday, April 05, 2013) >> Wednesday, January 03, 1900

bien sûr j'ai besoin de Tuesday, April 09, 2013

Merci

6
xyz

Avez-vous utilisé la fonction 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
16
David Zemens

Je pense que ce code est ce que vous utilisez après avoir utilisé la fonction 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

Quelques points cependant:

  • La fonction d’entrée renverra le booléen_ FAUXsi aucune entrée n’est entrée.
  • Le test que vous avez utilisé ci-dessus est une fonction et retournera une valeur lorsqu'il sera utilisé
  • Si vous voulez utiliser dans un autre code VBA, i = AskForDeadlinePlus4 est son utilisation;
  • Mais vous pouvez également l'utiliser dans une cellule, mais seulement lorsque cela est nécessaire, comme pour chaque calcul, cela invite une entrée et pour chaque cellule son in, =AskForDeadlinePlus4; et
  • De plus, j'ai ajouté une vérification pour voir si une date a été entrée car l'utilisateur ne peut pas entrer une date valide.

Si vous voulez utiliser dans VBA:

Sub GetInfo()
    'the 2, 10 is the cell reference for J2 - row 2, column 10.
    ActiveSheet.Cells(2, 10).Value = AskForDeadlinePlus4
End Sub
2
glh

Au lieu d'utiliser DateAdd, qui nécessite davantage de frappe, vous pouvez également utiliser DateValue. Suivre le ferait.

DateValue(strUserResponse )+I2

Une autre solution consisterait à utiliser la fonction de conversion, CDate.

CDate(strUserResponse )+I2
0
ExcelinEfendisi