2016-08-12 2 views
1

J'ai le code suivant qui fonctionnait parfaitement avant mais ça ne marche pas maintenant.Comment convertir en format "12/08/16" et comparer en VBA?

Ci-dessous est le code qui convertit la chaîne date à date et compare avec la date d'aujourd'hui. code:

Dim fileDate1 As Date 
fileDate1 = CDate("12/08/16") 'dd/mm/yy' 
If Format(fileDate1, "yyyymmdd") < Format(Date, "yyyymmdd") Then 
    //delete file because date changed 
    KillFileOnMac XMLFilePath 
End If 

Quelqu'un peut-il me suggérer ce que je suis absent ici?

+2

Où l'erreur se produit-elle? Tu ne veux pas dire maintenant avec Date? – Wernerson

+0

@Wernerson Je veux dire que ça fonctionnait dans mon ancien système. J'ai changé le système maintenant. Je ne sais pas si c'est lié ou OS. Mais le code ci-dessus ne fonctionne pas. La variable 'fileDate1' est vide. –

+0

Alors que Wernerson demande où se situe l'erreur? – DragonSamu

Répondre

4

Nanji, le commentaire sur la deuxième ligne est douteuse, sur mon système cette ligne fixe fileDate1 retour en l'an 2012, août 16. Il serait beaucoup plus sûr d'utiliser à la place:

fileDate1 = DateSerial(2016, 8, 12) 

(pour plus de clarté, vous pouvez également envisager de se débarrasser des appels à « format », il suffit de comparer les dates directement: If fileDate1 < Date Then...)

+0

Merci. J'ai traité ceci dans MacScript. Maintenant, MacScript gère la comparaison des dates. Je peux aussi utiliser votre solution mais pour cela je dois remplir certains paramètres. Je pense que l'autre façon que j'ai utilisé MacScript est mieux, car il gère tous les formats de date. –

1

On dirait que vous attendiez que CDATE (« 08/12/16 ») serait égale à 12 Août, ici 2016. La date est en réalité le 8 décembre 2016.

Nous peut dire par:

Dim fileDate1 As Date 
fileDate1 = CDate("12/06/16") 
MsgBox Format(fileDate1, "yyyymmdd") 

Cela montre 20161206.

, il ressemble à votre entrée de chaîne de date est le problème. Une fois que vous avez travaillé, comme Mats Lind l'a suggéré, vous n'avez pas besoin de mettre en forme des dates pour les comparer. Voici comment je le manipulerais:

Dim fileDate1 As Date 
fileDate1 = CDate("12/08/16") 

If fileDate1 < DateValue(Now) Then 

    MsgBox "I shall kill the file because the date changed" 
    KillFileOnMac XMLFilePath 
Else 
    MsgBox "The file date is today or newer " 

End If 

J'utilise dateValue (maintenant) car il fonctionne multiplate-forme. J'évite MacScript car je ne m'attends pas à ce qu'il soit supporté pour toujours. J'espère que cela aide.