HERBERS Excel-Forum - die Dialoge

Thema: Modal oder nicht modal

Home
Ab Version 9.0 können UserForms die Modeless-Eigenschaft besitzen. Man kann also bei stehender UserForm im Tabellenblatt arbeiten. Die Einstellung wird entweder durch setzen der ShowModal-Eigenschaft auf False oder durch den UserForm-Aufruf mit der Konstanten 0 gesetzt. In der derzeitigen Einstellung wird die Userform Modal gestartet, es kann also in XL9 oder höher nicht im Blatt gearbeitet werden, wenn keine Umstellung erfolgt. Excel97 kennt die ShowModal-Eigenschaft nicht, das Problem kann aber über einen API-Aufruf umgangen werden. Mit der derzeitigen Einstellung wird die UserForm in Excel97 modeless gestartet, es kann also im BLatt gearbeitet werden. Modeless
  • UserForm-Eigenschaft auf modeless setzen
    • Prozedur: UserForm_Activate
    • Art: Ereignis
    • Modul: Klassenmodul der UserForm
    • Zweck: Modalität der UserForm ändern
    • Ablaufbeschreibung:
      • Focus auf die Excel-Tabelle setzen
      • Drag&Drop-Möglichkeit ausschalten
    • Code:
      
      Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
         (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      Private Declare Function EnableWindow Lib "user32" _
         (ByVal hwnd As Long, ByVal bEnable As Long) As Long
      
      Private Sub UserForm_Activate()
         Dim hwndXL&
         hwndXL = FindWindow("XLMAIN", Application.Caption)
         If hwndXL <> 0 Then
            EnableWindow hwndXL, 1
            Application.CellDragAndDrop = False
         End If
      End Sub
      
  • Drag&Drop-Modus zurücksetzen
    • Prozedur: UserForm_QueryClose
    • Art: Ereignis
    • Modul: Klassenmodul der UserForm
    • Zweck: Drag&Drop-Modus zurücksetzen
    • Ablaufbeschreibung:
      • Drag&Drop-Modus zurücksetzen
    • Code:
      
      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
         Application.CellDragAndDrop = True
      End Sub
      
    Bitte beachten: In XL2000 oder höher muss die ShowModale-Eigenschaft auf False gesetzt oder die Userform mit dem Parameter 0 gestartet werden.