2017-06-04 6 views
1

J'essaye d'obtenir la date 4 jours plus vieux que maintenant. Voici mon codeVBA ne peut pas soustraire des jours de date

Sub calcdate() 
Dim nDateTime, oDateTime As Date 
nDateTime = Format(Now, "YYMMDD") 
oDateTime = Format(DateAdd("d", -4, nDateTime), "YYMMDD") 
MsgBox ("Today is " & nDateTime & " And OldDate is " & oDateTime) 
End Sub 

Mais la sortie est aujourd'hui est 170604 et OldDate est 02-10-3734”

moi avons essayé de le faire sans DateAdd

nDateTime = Format(Now, "YYMMDD") 
oDateTime = nDateTime - 4 

* La sortie est 'aujourd'hui est 170604 et 170604' est OldDate

J'ai essayé ces changements

nDateTime = Format(Now, "YYMMDD") 
oDateTime = DateAdd("d", -4, nDateTime) 

* La sortie est aujourd'hui est 170604 et OldDate est 31-01-2367 '

nDateTime = Format(Now, "YY-MM-DD") 
oDateTime = Format(DateAdd("d", -4, nDateTime), "YY-MM-DD") 

* La sortie est aujourd'hui est 17-06-04 et OldDate est 06.04.2013'

Donc, il semble ici qu'il soustrait des années bien que je mette "d".

dernière chose que j'ai essayé:

nDateTime = Format(Now, "DD-MM-YY") 
oDateTime = Format(DateAdd("d", -4, nDateTime), "DD-MM-YY") 

* La sortie est aujourd'hui est 6.4.17 et OldDate est 31-05-2017 ' je veux cette date, au format 170531, aussi pourquoi at-il donne moi 2017 alors que je choisis le format YY seulement?

Répondre

1

Le format crée une chaîne de sorte que vous ne pouvez plus effectuer correctement les calculs. Faites votre mise en forme après la place:

Dim nDateTime As Date, oDateTime As Date 
nDateTime = Now 
oDateTime = nDateTime - 4 
MsgBox "Today is " & Format(nDateTime, "YYMMDD") & " And OldDate is " & Format(oDateTime, "YYMMDD") 

En outre, vous devez déclarer le type de variable pour chaque variable, comme je l'ai fait.

+0

cela a fonctionné, grâce @Absinthe 'Dim oDateTime As Date oDateTime = Maintenant - 4 MsgBox ("OldDate est" & Format (oDateTime, "YYMMDD")) ' Je sais que ce n'est peut-être pas optimal de cette façon, mais ce n'est pas le code original, je vais l'utiliser pour faire autre chose, donc c'est suffisant. à propos de la déclaration, je crois que je peux les déclarer ensemble comme dans mon code, je l'ai vérifié sur msdn, et il fonctionne de toute façon [https://msdn.microsoft.com/fr-fr/library/office/gg264241.aspx] –

+0

@ i.fathy- dans VBA chaque déclaration de variable nécessite un type (sauf si vous voulez que ce soit Variant). Vous ne pouvez pas simplement mettre «Comme quelque chose» à la fin d'une liste de variables –

+0

merci, mon mauvais, l'a obtenu. –

0

parce Format (maintenant, "YYMMDD") résultat est une chaîne

Dim myDate As Date 
Dim nDatetime As String, oDateTime As String 

myDate = Now 
nDatetime = Format(myDate, "yymmdd") 
oDateTime = Format(DateAdd("d", -4, myDate), "YY-MM-DD") 
+0

merci beaucoup, cela fonctionne. –