2012-08-23 11 views
0

Salut J'essaie de mettre une certaine validation UserForm pour la plage de dates qui est entré par un utilisateur.Excel VBA - Trouver la date précédente

La plage de dates qui doit être sélectionnée est la semaine précédente du lundi au dimanche, par exemple. Du 13 août 2012 au 19 août 2012. Donc, si je devais publier le rapport aujourd'hui (24 août 2012), comment puis-je savoir que les dates auxquelles je dois entrer sont du 13 août 2012 au 19 août 2012, et si je courais le rapport demain. Puis-je le faire en établissant le WeekDayName du jour où je cours le rapport (par exemple vendredi) et de cette utilisation DateAjouter pour soustraire au lundi précédent (-11) pour la première date et soustraire à la dimanche précédent (-5) pour la deuxième date. Par conséquent, si l'utilisateur devait entrer la plage de dates du 14 août 2012 et du 19 août 2012, un message msgbox s'affichera pour lui indiquer que la plage de dates à entrer est comprise entre le 13 août 2012 et le 19 août 2012 et souhaite-t-il continuer.

Espérons que cela a du sens.

+1

Si c'est toujours une semaine, pourquoi ne pas les laisser entrer uniquement la date de début? –

Répondre

0

Cela fonctionne:

Sub testDate() 

    Dim myDate As Date 
    myDate = "8/14/2012" 

    Dim weekStartDate As Integer 
    weekStartDate = 2 
    'set for the sunday -> sunday for the given date 

    Dim startDate, endDate As Date 
    startDate = myDate - Weekday(myDate) + weekStartDate 'take current date, find system weekstart (Sunday), adjust accordingly 
    endDate = startDate + 6 'you are only adding 6 days to your week it seems? 

    MsgBox ("Please select a date between " & startDate & " and " & endDate) 

End Sub 

Lorsque vous utilisez Weekday(myDate) il retourne un entier qui est le nombre de jours écoulés depuis le début de la semaine du système, qui, je crois normalement dimanche. Donc Monday = 1 etc.