В продолжение ответа @ 76mel, хороший способ сделать это с немодальной пользовательской формой. Сделайте что-нибудь действительно простое, используя только ярлык и подпись, подобную этой:
Мне нравится, когда пользовательская форма установлена как:
- Немодально (в свойствах F4 , установить
ShowModal
в false)
- Это означает, что вы можете щелкнуть за пределами строки состояния, и это не остановит вас.
- Я установил
StartupPosition
на 0-Manual
, а Top
и Left
на что-то вроде 100, чтобы форма состояния отображалась в верхнем левом углу экрана (в отличие от других сообщений, которые появляются по умолчанию в центре)
Установите для метки value
некоторый текст по умолчанию, когда пользовательская форма впервые загружается
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
Обратите внимание, как и в случае с Application.Statusbar
в Excel, вы должны сбросить пользовательскую форму до значения по умолчанию, если вы планируете использовать ее позже в том же экземпляре Excel
При желании используйте это тоже
'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
в самом коде пользовательской формы, чтобы держать его всегда сверху