Ich bräuchte wieder einmal etwas Hilfe.
Ich habe eine Menüleiste , diese möchte ich in mehreren Userforms nutzen ohne Sie in jede Userform zu schreiben. Was muss ich dafür tun? Klassenmodul? nur Modul?
hier der Code.
--------------------------------------------------------
Modul
---------------------------------------------------------
Option Explicit
Private Declare PtrSafe Function CallWindowProc _
Lib "user32" Alias "CallWindowProcA" ( _
ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) As Long
Private Const WM_COMMAND As Long = &H111
Public glngOldProc As Long
Public Function NewProc(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long _
) As Long
If Msg = WM_COMMAND Then
If lParam = 0 Then
Select Case wParam
Case Is = 120
Unload UserForm_Menü
ThisWorkbook.Save
Application.Quit
Case Is = 210
'Call Anmeldungen.AL_drucken
Case Is = 220
Call Anmeldungen.AL_drucken
Case Is = 331
Call IBK_PH.IBK_BL_drucken
Case Is = 332
Call IBK_PH.IBK_PL_drucken
Case Is = 333
Call IBK_PH.IBK_AEL_drucken
Case Is = 334
Call IBK_PH.IBK_AAL_drucken
Case Is = 335
Call IBK_PH.IBK_BF_drucken
Case Is = 336
Call IBK_PH.IBK_FZ_drucken
Case Is = 337
Call IBK_PH.IBK_ZÜ_drucken
Case Is = 338
Call IBK_PH.IBK_TGÜ_drucken
End Select
End If
End If
NewProc = CallWindowProc(glngOldProc, hWnd, Msg, wParam, lParam)
End Function
---------------------------------------------------------------------
USerform
-------------------------------------------------------------------------
Option Explicit
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 FindWindow _
Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long
Private Declare Function CreatePopupMenu _
Lib "user32" () As Long
Private Declare Function CreateMenu _
Lib "user32" () As Long
Private Declare Function DestroyMenu _
Lib "user32" ( _
ByVal glngMenu As Long _
) As Long
Private Declare Function DrawMenuBar _
Lib "user32" ( _
ByVal hWnd As Long _
) As Long
Private Declare Function SetMenu _
Lib "user32" ( _
ByVal hWnd As Long, _
ByVal glngMenu As Long _
) As Long
Private Declare Function InsertMenuItem _
Lib "user32" Alias "InsertMenuItemA" ( _
ByVal hMenu As Long, _
ByVal un As Long, _
ByVal bool As Long, _
lpcMenuItemInfo As MENUITEMINFO _
) As Long
Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Private Const MF_CHECKED = &H8&
Private Const MF_APPEND = &H100&
Private Const MF_DISABLED = &H2&
Private Const MF_GRAYED = &H1&
Private Const MF_SEPARATOR = &H800&
Private Const MF_STRING = &H0&
Private Const MIIM_STATE As Long = &H1&
Private Const MIIM_ID As Long = &H2&
Private Const MIIM_TYPE = &H10
Private Const MIIM_SUBMENU = &H4
Private Const MIIM_CHECKMARKS = &H8
Private Const GWL_WNDPROC = (-4)
Private mlngUserform As Long
Private mlngMenuParent As Long
Private Sub MakeMenu()
Dim MnuItem As MENUITEMINFO
Dim lngSub As Long
Dim lngUntermenü As Long
Dim lngHauptmenü1 As Long
Dim lngHauptmenü2 As Long
Dim lngHauptmenü3 As Long
' Mainmenü anlegen
mlngMenuParent = CreateMenu()
lngHauptmenü1 = CreatePopupMenu()
lngHauptmenü2 = CreatePopupMenu()
lngHauptmenü3 = CreatePopupMenu()
'lngHauptmenü4 = CreatePopupMenu()
'lngHauptmenü5 = CreatePopupMenu()
lngUntermenü = CreatePopupMenu()
'lngUntermenü1 = CreatePopupMenu()
'lngUntermenü2 = CreatePopupMenu()
With MnuItem
' Länge der Struktur
.cbSize = Len(MnuItem)
' 1. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 100& ' Eindeutige ID
.hSubMenu = lngHauptmenü1 ' Angabe des verbundenen Submenüs
.dwTypeData = "&Datei" ' Menütext
' 1. Hauptmenüpunkt ins Mainmenü einfügen
InsertMenuItem mlngMenuParent, 0&, True, MnuItem
'________
' 1. Submenüpunkt, 1. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
'.fState = MF_GRAYED ' Ausgegraut
.wID = 120& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Beenden" ' Menütext
' Menüpunkt ins 1. Submenü einfügen
InsertMenuItem lngHauptmenü1, 0&, True, MnuItem
' 2. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 200& ' Eindeutige ID
.hSubMenu = lngHauptmenü2 ' Angabe des verbundenen Submenüs
.dwTypeData = "&Anmeldung" ' Menütext
' Menüpunkt ins Mainmenü einfügen
InsertMenuItem mlngMenuParent, 1&, True, MnuItem
'________
' 1. Submenüpunkt, 2. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 210& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Neue Anmeldung" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngHauptmenü2, 0&, True, MnuItem
' 2. Submenüpunkt, 2. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 220& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Liste Anmeldungen" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngHauptmenü2, 1&, True, MnuItem
'-------------------------------------------------------------------------------------------- _
_
' 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 300& ' Eindeutige ID
.hSubMenu = lngHauptmenü3 ' Angabe des verbundenen Submenüs
.dwTypeData = "&PH-Innsbruck" ' Menütext
' Menüpunkt ins Mainmenü einfügen
InsertMenuItem mlngMenuParent, 2&, True, MnuItem
'________
' 1. Submenüpunkt, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 310& ' Eindeutige ID
.hSubMenu = 0 ' enthält ein Submenü
.dwTypeData = "&Top" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngHauptmenü3, 0&, True, MnuItem
' 2. Submenüpunkt, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 320& ' Eindeutige ID
.hSubMenu = 0 ' enthält ein Submenü
.dwTypeData = "&Bewohner" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngHauptmenü3, 1&, True, MnuItem
' 3. Submenüpunkt, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 330& ' Eindeutige ID
.hSubMenu = lngUntermenü ' enthält ein Submenü
.dwTypeData = "&Listen" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngHauptmenü3, 2&, True, MnuItem
'________
'1. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 331& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Liste Bewohnern" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 0&, True, MnuItem
'2. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 332& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Postliste" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 1&, True, MnuItem
'3. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 333& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&aktuelle Einzüge" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 2&, True, MnuItem
'4. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 334& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&aktuelle Auszüge" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 3&, True, MnuItem
'5. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 335& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Befristungenn" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 4&, True, MnuItem
'6. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 336& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&freie Zimmer" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 5&, True, MnuItem
'7. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 337& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&Übersicht" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 6&, True, MnuItem
'8. Untermenü, 3. Submenü, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 338& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "&TG-Plan" ' Menütext
' Untermenüpunkt einfügen
InsertMenuItem lngUntermenü, 7&, True, MnuItem
End With
' Menü mit Userform verbinden
SetMenu mlngUserform, mlngMenuParent
DrawMenuBar mlngUserform
' WindowProc umleiten
glngOldProc = SetWindowLong(mlngUserform, _
GWL_WNDPROC, AddressOf NewProc)
End Sub
Private Function GetMyHandle() As Long
Dim strMe As String
Dim strFind As String
strFind = "asdfghjk"
strMe = Me.Caption
Me.Caption = strFind
GetMyHandle = FindWindow(vbNullString, Me.Caption)
Me.Caption = strMe
End Function
Private Sub UserForm_QueryClose(Cancel As Integer, _
CloseMode As Integer)
Unload Me
End Sub
Private Sub UserForm_Terminate()
DestroyMenu mlngMenuParent
SetWindowLong mlngUserform, GWL_WNDPROC, glngOldProc
End Sub
Public Sub UserForm_Initialize()
mlngUserform = GetMyHandle 'Menüleiste
MakeMenu
End Sub
Danke für eure HilfeGruß
Friedl