Domanda

Qual è la migliore pratica per indicare all'utente che una macro è in esecuzione all'interno di Outlook? La macro può richiedere circa 1-30 secondi.

Voglio evitare un modale viene eseguito 'msgbox' popping up prima della macro, in quanto questo può essere fastidioso.

avrei preferito evitare il cursore a clessidra, se possibile, e mi chiedevo se ci fosse un modo migliore.

C'è un modo di porre un messaggio non modale 'status' su, mentre l'esecuzione della macro?

(La macro ho corse contro il MailItem attualmente selezionato - ed è lanciato da un pulsante sulla barra di accesso rapido).

È stato utile?

Soluzione

Questo articolo ( anche questo ) sulle migliori pratiche dice utilizzare la barra di stato.

Questo articolo su Outlook dice:

  

Modifica della barra di stato
  Non c'è   modo per cambiare il testo della barra di stato in   Microsoft Outlook. La barra di stato è   non esposto come in altri   Microsoft Office modelli di oggetti.

codice per una finestra di avanzamento .

Altri suggerimenti

Un paio di cose che stringa in mente, io sono sicuro che altri avranno le idee pure.

1.Show un modulo con una barra di avanzamento su di esso che segnala il progresso o ha la barra di avanzamento in modalità marque se non è possibile segnalare il progresso 2.Show un modulo con una casella di immagine con la vostra gif animate preferito all'interno (spinny la pizza, ecc). È possibile disattivare i pulsanti ecc 3. Utilizzare vincere api per ottenere giocare con la barra staus prospettive

Non sapendo cosa si sta facendo nella macro si può avere a che fare con il mantenimento della forma “in alto” e pompando il progresso asincrono in esso.

Saluti

Marcus

Ampliando @ risposta di 76mel, un bel modo per farlo è con un form non modale. Fare qualcosa di veramente semplice, con solo un'etichetta e la didascalia in questo modo: status EG

Quello che mi piace fare è avere il form impostato come:

  • non modale (nelle proprietà di F4 , impostare ShowModal false)
    • Questo significa che è possibile fare clic al di fuori della barra di stato e non ti fermare.
  • Ho impostato il StartupPosition per 0-Manual e Top e Left a qualcosa come 100 in modo che la forma di stato viene visualizzato nell'angolo in alto a sinistra dello schermo (fuori del modo di tutti gli altri messaggi che appaiono nel centro di default)

Imposta value della griffe per un testo predefinito per quando i primi carichi form

Public strStatus As String
Public Const defaultStatus As String = "Default status text" 'set this to whatever you want

Sub statusReporter()
frmStatus.Show
'''
'Your code here
'''
    frmStatus.lblStatus = "Step 1"
    '...
    frmStatus.lblStatus = "Step 2"
    '...
'''
'Unload the form
'''
frmStatus.lblStatus = defaultStatus
frmStatus.Hide
End Sub

Nota, come con Application.Statusbar di Excel è necessario ripristinare il form al suo valore di default, se si prevede di utilizzare in un secondo momento nella stessa istanza di Excel utilizzare opzionalmente anche questo

'Written By RobDog888 - VB/Office Guru™
'Add a Command Button so you can toggle the userform's topmost effect

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
                    ByVal lpClassName As String, _
                    ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPos Lib "user32" ( _
                    ByVal hwnd As Long, _
                    ByVal hWndInsertAfter As Long, _
                    ByVal X As Long, _
                    ByVal Y As Long, _
                    ByVal cx As Long, _
                    ByVal cy As Long, _
                    ByVal wFlags As Long) As Long

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private mlHwnd As Long


Private Sub UserForm_Initialize()
Dim overTim As Single
overTim = Timer
    mlHwnd = FindWindow("ThunderDFrame", "Status") 'Change "Status" to match your userforms caption
    Do While mlHwnd = 0 And Timer - overTim < 5
        mlHwnd = FindWindow("ThunderDFrame", "Status")
        DoEvents
    Loop
    'Set topmost
    SetWindowPos mlHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub

nel codice userform stesso per tenerlo in cima sempre

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top