hello i have a following code: when i run it everything works fine so. UserForm1 is opened (word file is running in the background but is not visible) when I close UserForm1, everything closes.
The problem is that I don't have an icon at the bottom of my taskbar where I can click on UserForm1 when it is in the background. How can I solve this? would appreciate some code
My UserForm1 code:
Private Sub CommandButton1_Click()
UserForm1.Hide
Application.Visible = True
End Sub
Private Sub UserForm_Terminate()
Dim appWord As Object
Set appWord = Application
ThisDocument.Save
ThisDocument.Close
End Sub
My Doc module code:
Sub AutoOpen()
Application.Visible = False
UserForm1.Hide
UserForm1.Show vbModeless
End Sub
VBA doesn't provide anything for that out of the box. You need to use Windows API functions for getting the job done. For example, here is the sample code which you can use for changing the window styles (see the AppTasklist
sub):
Option Explicit
'API functions
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) 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 Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" _
() As Long
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long
'Constants
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const GWL_EXSTYLE = (-20)
Private Const HWND_TOP = 0
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (-16)
Private Const WS_MINIMIZEBOX = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const WM_SETICON = &H80
Private Const ICON_SMALL = 0&
Private Const ICON_BIG = 1&
Private Sub AppTasklist(myForm)
'Add this userform into the Task bar
Dim WStyle As Long
Dim Result As Long
Dim hwnd As Long
hwnd = FindWindow(vbNullString, myForm.Caption)
WStyle = GetWindowLong(hwnd, GWL_EXSTYLE)
WStyle = WStyle Or WS_EX_APPWINDOW
Result = SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, _
SWP_NOMOVE Or _
SWP_NOSIZE Or _
SWP_NOACTIVATE Or _
SWP_HIDEWINDOW)
Result = SetWindowLong(hwnd, GWL_EXSTYLE, WStyle)
Result = SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, _
SWP_NOMOVE Or _
SWP_NOSIZE Or _
SWP_NOACTIVATE Or _
SWP_SHOWWINDOW)
End Sub
Private Sub UserForm_Activate()
Application.Visible = False
Application.VBE.MainWindow.Visible = False
AppTaskList Me
End Sub
Private Sub UserForm_Terminate()
Application.Visible = True
End Sub
See Excel Useform: How to hide application but have icon in the taskbar for more information.
Also you may find the sample code helpful - Display Userform in TaskBar with custom Icon and Hide Excel (mimicking a standalone application) .