Да, это может быть достигнуто, но с использованием API SetWindowPos
и FindWindowA
. Вы можете прочитать об этих API Здесь
Это то, что вы пытаетесь?
Код :
Option Explicit
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOPMOST = -1
Private 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 Declare Function FindWindowA _
Lib "user32" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Sub Sample()
Dim hwnd As Long
UserForm1.Show vbModeless
'~~> Find the handle of the userform
hwnd = FindWindowA("ThunderDFrame", UserForm1.Caption)
'~~> Set the form as the top most window
SetTopMostWindow hwnd, True
End Sub
Private Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) As Long
If Topmost = True Then
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
Тестирование
- Вставьте код в модуль рабочей книги с пользовательской формой.
- Откройте две рабочие книги.
- Замените
Userform1
на Ваше имя пользователя. - Запустите pro c
Sample
.