Userformen übereinander

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm Frame
Bild

Betrifft: Userformen übereinander
von: Wolfgang
Geschrieben am: 24.08.2015 16:20:09

Hallo alle gemeinsam,
ich habe zwei Userformen. Unter bestimmten Voraussetzungen soll die zweite Userform angezeigt werden, wenn die erste schon eingeblendet ist. Die Zweite soll immer im Vordergrund stehen.
Momentan verschwindet die Zweite hinter der Ersten, wenn das Makro abgelaufen ist.
Ich finde leider keine Lösung. Kann mir jemand helfen?
Wolfgang
aus dem Erzgebirge

Bild

Betrifft: AW: Userformen übereinander
von: Matthias
Geschrieben am: 24.08.2015 16:24:45
Hallo Wolfgang,
macht es eventuell Sinn die erste Userform auszublenden, während du in der zweiten arbeitest?
"Userform1.hide"
lg Matthias

Bild

Betrifft: AW: Userformen übereinander
von: Wolfgang
Geschrieben am: 24.08.2015 16:29:38
Hallo Matthias,
das ginge schn, doch ich hätte beide sichtbar, da die Zweite wesendlich kleiner ist.
Wolfgang
aus dem Erzgebirge

Bild

Betrifft: dann benutze nochmal Userform2.Show ... owT
von: Matthias L
Geschrieben am: 24.08.2015 16:36:30


Bild

Betrifft: AW: Userformen übereinander
von: Daniel
Geschrieben am: 24.08.2015 16:43:41
Hi
wenn du die zweite Userform einblendest wenn die ersten schon sichtbar ist, dann platziere sie über folgenden Code im Initialize-Event der Userform2 neben der userform1:
Me.Top = Userform1.Top
Me.Left = Userform1.Left + Userform1.Width
Gruß Daniel

Bild

Betrifft: AW: Userformen übereinander
von: Wolfgang
Geschrieben am: 24.08.2015 18:36:57
Hallo,
Ich werde wohl die Userform1 doch ausblenden.
Danke für die Mühe.
Wolfgang
aus dem Erzgebirge

Bild

Betrifft: AW: Userformen übereinander
von: Nepumuk
Geschrieben am: 24.08.2015 19:13:14
Hallo,
in das Modul des 2. Userforms:

Option Explicit

Private Declare PtrSafe Function SetWindowPos Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal hWndInsertAfter As LongPtr, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr

Private Const HWND_TOPMOST As LongPtr = -1
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Private Sub UserForm_Activate()
    Dim lngptrHwnd As LongPtr
    lngptrHwnd = FindWindow(GC_CLASSNAMEUSERFORM, Caption)
    Call SetWindowPos(lngptrHwnd, HWND_TOPMOST, _
        0&, 0&, 0&, 0&, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

Gruß
Nepumuk

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler '4609' - Zeichenfolge zu lang"