2017-06-29 3 views
0

La plupart de mes tâches sont effectuées via Outlook 2016, c'est-à-dire que la plupart du travail consiste à composer et à répondre à des courriels. Si je ne déconnecte pas Outlook, je suis distrait par l'afflux constant. Et souvent, dans une heure ou deux, je n'ai pas besoin de répondre parce que la tâche a été traitée.Automatisation de Outlook hors ligne/en ligne

Je peux basculer Outlook hors ligne/en ligne manuellement, mais je me demandais s'il y avait une macro qui permettrait d'automatiser cela.

Mon horaire est le suivant

7 heures en ligne 08:45 Hors ligne 10:45 en ligne 10:50 Hors ligne 12:45 en ligne 12:50 Hors ligne 14:30 en ligne 14:35 Hors ligne 15:55 en ligne 16:00 Hors ligne 16:55 en ligne 17:00 Hors ligne

avec la possibilité de passer outre manuellement?

Est-ce possible?

je peux faire des macros Excel de base, mais je ne l'ai jamais fait une macro d'Outlook

Répondre

0

MAPI étendu (C++ ou Delphi) - vous pouvez utiliser IMAPIOfflineMgr::SetCurrentState.
Si vous utilisez d'autres langages que C++ ou Delphi, vous pouvez utiliser Redemption et RDOSession. Offline propriété:

set Session = CreateObject("Redemption.RDOSession") 
Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
Session.Offline = true 

Gardez à l'esprit cependant que interfaace de IMAPIOfflineMsg ne peut pas être marshalé entre les différents processus (par exemple outlook.exe et excel.exe), donc ni IMAPIOfflineMgr ni RDOSession.Offline travailleraient à partir d'Excel VBA. Vous pouvez essayer de simuler un clic sur le bouton « Travailler hors connexion » utilisant l'API d'accessibilité ou encore, en utilisant la Rédemption et son objet SafeExplorer:

set sExplorer = CreateObject("Redemption.SafeExplorer") 
sExplorer.Item = Application.ActiveExplorer 
set Ribbon = sExplorer.Ribbon 
oldActiveTab = Ribbon.ActiveTab 
Ribbon.ActiveTab = "Send/Receive" 
set Control = Ribbon.Controls("Work Offline") 
Control.Execute 
Ribbon.ActiveTab = oldActiveTab 'restore the active tab 
0

Merci à Diane à Slipstick, et un peu de mon propre travail , J'ai trouvé une solution. Voir https://forums.slipstick.com/threads/95555-vba-to-switch-outlook-online-offline/

Il existe trois ensembles de macros: un pour basculer hors ligne, un pour basculer en ligne, puis une macro pour affecter une tâche à la planification. Les deux premières macros sont ici, la troisième que vous pouvez trouver dans la référence du forum ci-dessus.

Hope this helps quelqu'un

Sub SetOffline() 

Dim oNS As NameSpace 
Set oNS = Application.Session 

If oNS.ExchangeConnectionMode <> olCachedOffline And _ 
oNS.ExchangeConnectionMode <> olOffline Then 

Dim olApp As Outlook.Application 
Dim olNS As Outlook.NameSpace 
Dim objExpl As Outlook.Explorer 
Set olApp = Application 
Set olNS = olApp.GetNamespace("MAPI") 
Set objExpl = olApp.ActiveExplorer 

objExpl.CommandBars.ExecuteMso ("ToggleOnline") 

End If 

End Sub 

et

Sub OnlineStatus() 
Dim oNS As NameSpace 
Set oNS = Application.Session 

If oNS.ExchangeConnectionMode = olOnline 

Dim olApp As Outlook.Application 
Dim olNS As Outlook.NameSpace 
Dim objExpl As Outlook.Explorer 
Set olApp = Application 
Set olNS = olApp.GetNamespace("MAPI") 
Set objExpl = olApp.ActiveExplorer 

objExpl.CommandBars.ExecuteMso ("ToggleOnline") 

End If 
End Sub 
0

merci pour trouver l'info Jo8888

le code définit les objets d'une manière confuse (certains pas utilisé)

voici une version d'une ligne de chacun des sous-marins

Sub ToggleStatus() 
    Application.ActiveExplorer.CommandBars.ExecuteMso ("ToggleOnline") 
End Sub 


Sub ReportStatus() 

    Debug.Print Application.Session.ExchangeConnectionMode  ' prints out status (numeric value) 


    ' here are the numeric values of the connectionMode constants that are defined in outlook 

    ' olNoExchange    = 0, 
    ' olOffline    = 100, 
    ' olCachedOffline   = 200, 
    ' olDisconnected   = 300, 
    ' olCachedDisconnected  = 400, 
    ' olCachedConnectedHeaders = 500, 
    ' olCachedConnectedDrizzle = 600, 
    ' olCachedConnectedFull = 700, 
    ' olOnline     = 800 

End Sub