2017-08-18 2 views
1

Lorsque j'utilise restrict pour définir la plage de dates sur un objet élément Outlook, il ne prend aucun rendez-vous avant tout ce que j'ai défini comme mes "heures de travail" sur Outlook. Comment puis-je faire ce que l'utilisateur définit comme "Heures de travail" n'influence pas ma macro?Outlook VBA .Restrict utilise des heures de travail

Par exemple. Mes "heures de travail" dans Outlook sont définies entre 13 heures et 17 heures. Créer 4 nominations:

  • 1111 à 10 heures le 4 septembre 2017
  • 2222 à 13 heures le 4 septembre 2017
  • 3333 à 18 heures le 4 septembre 2017
  • 4444 à 13 heures 5 septembre 2017

Mon code va récupérer les 3 derniers rendez-vous, mais pas le premier, si les dates que j'ai saisies sont le 04/04/2017 et le 9/5/2017.

Sub restrictDemo() 

Dim olkItems As Outlook.Items, _ 
    olkSelected As Outlook.Items, _ 
    olkAppt As Outlook.AppointmentItem, _ 
    dateStart As Date, _ 
    dateEnd As Date 

dateStart = InputBox("Starting date?", "", "m/d/yyyy") 
dateEnd = InputBox("Ending date?", "", "m/d/yyyy") 

If IsDate(dateStart) And IsDate(dateEnd) Then 

    Set olkItems = Session.GetDefaultFolder(olFolderCalendar).Items 
    olkItems.IncludeRecurrences = True 
    olkItems.Sort "Start" 
    Set olkSelected = olkItems.Restrict("[Start] >= '" & dateStart & "' AND [Start] <= '" & dateEnd & "'") 

    For Each olkAppt In olkSelected 
     counter = counter + 1 
     MsgBox counter 
     MsgBox olkAppt.Subject & " " & olkAppt.Location & olkAppt.Start 
    Next 

Else 
    MsgBox "You must enter valid starting and ending dates to run this macro.", vbCritical + vbOKOnly, MACRO_NAME 
End If 


End Sub 
+0

ok, donc, quelle est votre question? – jsotola

+0

Quelles sont les valeurs de dateStart et dateEnd? Gardez à l'esprit que les heures font partie de la valeur date/heure. Vous ne pouvez pas avoir une restriction sur les heures sans spécifier la date. –

+0

Ma question est comment puis-je avoir les «heures de travail» n'affectent pas ce programme. Si je saisis '9/4/2017' comme date de départ et '9/5/2017', je veux que la gamme que je sélectionne soit '04/09/2017 00:00' à '9/5/2017 12 : 00AM '. – Fruitful

Répondre

0

Utilisez le format attendu par Restict. https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/items-restrict-method-outlook

Sub restrictDemo() 

    Dim Counter As Long 

    Dim olkItems As items 
    Dim olkSelected As items 
    Dim olkAppt As AppointmentItem 

    Dim dateStart 
    Dim dateEnd 

    Dim StrFilter As String 

    ' You may need to use a different date format. 
    dateStart = InputBox("Starting date?", , "2017-08-22") 
    dateEnd = InputBox("Ending date?", , "2017-08-23") 

    If IsDate(dateStart) And IsDate(dateEnd) Then 

     Set olkItems = Session.GetDefaultFolder(olFolderCalendar).items 
     olkItems.IncludeRecurrences = True 
     olkItems.Sort "Start" 

     'StrFilter = "[Start] >= '" & dateStart & "' AND [Start] < '" & dateEnd & "'" 
     'Debug.Print StrFilter 

     StrFilter = "[Start] >= '" & Format(dateStart, "ddddd h:nn AMPM") & "'" 
     Debug.Print StrFilter 

     StrFilter = StrFilter & " AND [Start] < '" & Format(dateEnd, "ddddd h:nn AMPM") & "'" 
     Debug.Print StrFilter 

     Set olkSelected = olkItems.Restrict(StrFilter) 

     For Each olkAppt In olkSelected 
      Counter = Counter + 1 
      Debug.Print Counter & ":" & olkAppt.Subject & " " & olkAppt.location & olkAppt.start 
      'MsgBox Counter & ":" & olkAppt.Subject & " " & olkAppt.location & olkAppt.start 
     Next 

    Else 
     MsgBox "Enter valid starting and ending dates.", vbCritical + vbOKOnly, "MACRO_NAME" 

    End If 

End Sub 

La profonde question de savoir pourquoi une journée commence au début d'une journée de travail et se poursuit pendant 24 heures reste sans réponse.