Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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


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.

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige