Risolto Stato di outlook da excel con vba

ildragoncello

Utente abituale
22 Dicembre 2020
186
30
Castelnuovo Magra - SP
2019 - Win10 Pr
12
Dovrei controllare da una macro di excel se outlook e' online o offline ed eventualmente settare lo stato che mi serve, per esempio per prepare delle mail senza doverle inviare per controllare il contenuto prima un invio. Esiste la possibilità di mettere offline l`invio dal ribbon di outlook, ma vorrei farlo da programma.
 

rollis13

VBA Expert
Expert
15 Novembre 2015
2.567
115
Cordenons
Office 2016 x32
206
Io uso abitualmente questo snippet per verificare Outlook, vedi se riesci ad integralo nel tuo progetto.
Però potresti sempre usare .Display al posto di .Send per poterle verificare in Outlook prima dell'invio definitivo.
Visual Basic:
'...
'...
' apri Outlook se non già aperto
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
On Error GoTo 0
If OutApp Is Nothing Then
    Set OutApp = CreateObject("Outlook.Application")
    Avviato = True
End If
'...
'... qui tutta la parte relativa all'invio
'...
' chiusura e pulizie finali
Set OutMail = Nothing
If Avviato = True Then Set OutApp = Nothing   'se Outlook era chiuso ora chiudilo nuovamente
End Sub
 
  • Like
Reactions: ildragoncello

ildragoncello

Utente abituale
22 Dicembre 2020
186
30
Castelnuovo Magra - SP
2019 - Win10 Pr
12
Grazie rollis13 @rollis13 per avermi dato l'informazione sull'opzione Display, che funziona alla grande, e che utilizzerò se non trovo un'altra soluzione più congeniale, come vado a spiegare.
Il mio problema non è quello di sapere se Outlook è attivo o meno, a me interessa è "metterlo in stato di OffLine o ONLine" da programma."
La persona a cui è destinata questa applicazione non è soggetto "Smart" e vorrei evitare che settasse manualmente lo stato di Outlook in modalità OffLine e se lo dimenticasse, dopo aver verificato il contenuto delle mail.

In rete ho trovato uno snipett che sembrava che facesse al caso mio, ma credo che funzioni solo nel VBA di Outlook, perchè si ferma dove ho messo il commento.
Ecco il codice:

Visual Basic:
Sub ToggleOffline()
    Dim olApp As Outlook.Application
    Dim olNS As Outlook.Namespace
    Dim objExpl As Outlook.Explorer
    Set olApp = Application ' <<< Si ferma qui perché in Application c'è "Excel" e non "Outlook"
    Set olNS = olApp.GetNamespace("MAPI")
    Set objExpl = olApp.ActiveExplorer
    
    objExpl.CommandBars.ExecuteMso ("ToggleOnline")
End Sub
Grazie ancora per la tua risposta.
 

rollis13

VBA Expert
Expert
15 Novembre 2015
2.567
115
Cordenons
Office 2016 x32
206
Ti confermo che il problema che hai riscontrato è reale, infatti queste macro funzionano benissimo all'interno di Outlook.
Probabilmente, da Excel può essere gestito solo con l'uso delle API (a conoscerle bene :studia:).
Visual Basic:
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

Sub SetOnline()
    Dim oNS    As Namespace
    Set oNS = Application.Session
    If oNS.ExchangeConnectionMode = olCachedOffline Or 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
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!