Я не думаю, что есть какой-либо встроенный способ заставить форму оставаться на вершине в VBA, но один вопрос - вы вызываете DoEvents, когда обновляете что-либо в своей форме? По моему опыту, форма не перерисовывается, если, например, вы не вызовете DoEvents, прежде чем выполнить оператор Next в цикле.
Если это не ваша проблема, вы можете использовать вызовы API Windows, чтобы поместить окно вверху, хотя я не уверен, что оно остается сверху, используя этот код:
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Const SWP_NOMOVE = 2
Const SWP_NOSIZE As Long = 1
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
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 Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) As Long
If Topmost = True Then 'Make the window topmost
SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
Else
SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
SetTopMostWindow = False
End If
End Function
Private Function GetFormHwnd() As Long
GetFormHwnd = FindWindow(CLng(0), Me.Caption)
End Function
Public Sub SetFormAsTopMostWindow()
Call SetTopMostWindow(GetFormHwnd(), True)
End Sub
Я поместил это в модуль кода формы, и, похоже, он работает при перемещении других приложений; он остается на вершине.