Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA, alle Userforms gleichzeitig ansprechen

VBA, alle Userforms gleichzeitig ansprechen
26.09.2016 19:22:07
Jens
Hallo Spezies,
bei den meisten Userforms habe ich mittels Code das Schliesskreuz ausgeblendet.
Ich erachte es für das Projekt als nützlich!
Der Code steht in jeder Userform, die kein Schliesskreuz haben soll.
Leider ist der Code sehr lang und macht alles ziemlich unübersichtlich.
Daher nun die Frage:
Kann ich diesen speziellen Code in ein eigenes Modul packen
und die betreffenden Userforms wissen dann "OK, Schliesskreuz iss nich!"
Hier der Code:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
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 DrawMenuBar Lib "user32" (ByVal _
hwnd As Long) As Long
Private Const GWL_STYLE As Long = -16
Private Const WS_SYSMENU As Long = &H80000
Private hWndForm As Long
Private bCloseBtn As Boolean
Private Sub UserForm_Initialize()
If Val(Application.Version) >= 9 Then
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
Else
hWndForm = FindWindow("ThunderXFrame", Me.Caption)
End If
bCloseBtn = False
SetUserFormStyle
End Sub
Private Sub SetUserFormStyle()
Dim frmStyle As Long
If hWndForm = 0 Then Exit Sub
frmStyle = GetWindowLong(hWndForm, GWL_STYLE)
If bCloseBtn Then
frmStyle = frmStyle Or WS_SYSMENU
Else
frmStyle = frmStyle And Not WS_SYSMENU
End If
SetWindowLong hWndForm, GWL_STYLE, frmStyle
DrawMenuBar hWndForm
End Sub

Danke für die Hilfe,
Grüße, Jens
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA, alle Userforms gleichzeitig ansprechen
26.09.2016 19:30:46
Hajo_Zi
Hallo Jens,
warum so langen Code?
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'   Damit mit X nicht geschloßen werden kann
If CloseMode = 0 Then
MsgBox "Bitte schließen Sie die Anwendung mit der -Ende- Schaltfläche.", vbCritical
Cancel = 1
End If
End Sub


Anzeige
AW: VBA, alle Userforms gleichzeitig ansprechen
26.09.2016 19:58:16
Jens
Hallo Hajo,
naja, der Code ist aus dem Internet und mach genau das was ich möchte.
Ich möchte einfach das X oben rechts nicht sehen.
Was man nicht sieht, kann nicht angeklickt werden.
Dein Vorschlag ist schön kurz, funzt prima und ist Resourcenschonend.
Trotzdem ist das blöde X sichtbar.
Gruß, Jens
Anzeige
AW: VBA, alle Userforms gleichzeitig ansprechen
26.09.2016 20:00:40
Hajo_Zi
Hallo Jens,
ja benutze den Langen Code. Den Du aber wohl in jeder Userform wohl haben musst.
Gruß Hajo
AW: VBA, alle Userforms gleichzeitig ansprechen
26.09.2016 21:10:09
Nepumuk
Hallo,
in den UserForms in denen du das Schließenkreuz löschen willst:
Private Sub UserForm_Initialize()
    Call SetUserFormStyle(Caption)
End Sub

In einem Standardmodul:
Option Explicit

Private Declare Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32.dll" ( _
    ByVal hwnd As Long) As Long

Private Const GWL_STYLE As Long = -16
Private Const WS_SYSMENU As Long = &H80000
Private Const GC_CLASSNAME_USERFORM As String = "ThunderDFrame"

Public Sub SetUserFormStyle(ByVal pvstrCaption As String)
    Dim lngFormHwnd As Long
    Dim lngStyle As Long
    lngFormHwnd = FindWindowA(GC_CLASSNAME_USERFORM, pvstrCaption)
    lngStyle = GetWindowLongA(lngFormHwnd, GWL_STYLE)
    lngStyle = lngStyle And Not WS_SYSMENU
    Call SetWindowLongA(lngFormHwnd, GWL_STYLE, lngStyle)
    Call DrawMenuBar(lngFormHwnd)
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA, alle Userforms gleichzeitig ansprechen
26.09.2016 22:18:58
Jens
Hallo Nepumuk!
Du bist Klasse.
Habs gerade eingebunden.
Funzt auf Anhieb super und die Übersichtlichkeit wird deutlich erhöht.
Thema abgeschlossen.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige