Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Die Excel/VBA-Beispiele

Thema

Kopfleiste einer UserForm ein- und ausblenden

Gruppe

Dialog

Problem

Die Titelleiste einer UserForm soll ausgeblendet werden, damit diese nicht verschoben werden kann.

Lösung
Geben Sie den nachfolgenden Code in ein Standardmodul ein und weisen Sie ihn einer Schaltfläche zu.

ClassModule: frmCaption

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

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 Sub cmdCancel_Click()
  Unload Me
End Sub

Private Sub cmdOn_Click()
  Call fncHasUserformCaption(True)
End Sub

Private Sub cmdOff_Click()
   Call fncHasUserformCaption(False)
End Sub

Private Sub UserForm_Initialize()
  Call fncHasUserformCaption(False)
End Sub

Private Function fncHasUserformCaption(bState As Boolean)
  Dim Userform_hWnd As Long
  Dim Userform_Style As Long
  Dim Userform_Rect As RECT
  Const GWL_STYLE = (-16)
  Const WS_CAPTION = &HC00000
  Userform_hWnd = FindWindow( _
     lpClassName:=IIf(Val(Application.Version) > 8, _
     "ThunderDFrame", "ThunderXFrame"), _
     lpWindowName:=Me.Caption)
  Userform_Style = GetWindowLong(hWnd:=Userform_hWnd, _
     nIndex:=GWL_STYLE)
  If bState = True Then
     Userform_Style = Userform_Style Or WS_CAPTION
  Else
     Userform_Style = Userform_Style And Not WS_CAPTION
  End If
  Call SetWindowLong(hWnd:=Userform_hWnd, nIndex:=GWL_STYLE, _
     dwNewLong:=Userform_Style)
  Call DrawMenuBar(hWnd:=Userform_hWnd)
End Function

StandardModule: Modul1

Sub DialogAufruf()
   frmCaption.Show
End Sub