userform im Vordergrund

Moderator: ModerationP

userform im Vordergrund

Beitragvon benny66 » 18. Jul 2019, 21:03

Hallo,
in einer userform wird durch einen Button eine Worddatei geöffnet. Sie überdeckt die userform, da sie im Vordergrund liegt.
Wie kann man erreichen, dass die Userform im Vordergrund bleibt bzw. wieder in den Vordergrund kommt?
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 685
Registriert: 22. Nov 2015, 21:56

Re: userform im Vordergrund

Beitragvon DerHoepp » 19. Jul 2019, 07:47

Hallo Benny,

dafür ist ein kleines bisschen API notwendig. Prinzipiell erreichst du das Vorgehen mit der SetForeGroundWindow-Funktion der user32-Bibliothek. Die Funktion benötigt jedoch ein sog. Handle, um das Fenster zu identifizieren, dass in den Vordergrund geschoben werden soll.
In .Net oder klassischem VBA hast du über die .HWnd-Eigenschaft fast eines jeden Steuerelements direkt die Möglichkeit auf das entsprechende Handle zuzugreifen. In VBA funktioniert das jedoch nicht. Dafür hast du Zugriff auf die API-Funktion FindWindow, welche dir den Handle zurückgibt. FindWindow benötigt den (internen) Klassennamen deiner UserForm und die Fensterbeschriftung. Der Klassenname einer UserForm ist seit Windows 2000 immer ThunderDFrame.

Long Story short, für ein 32-Bit-System funktioniert der folgende Beispielcode im Klassenmodul der UserForm:
Code: Alles auswählen
Option Explicit
'####################
'# API Declarations #
'########API#########
    'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
   
    'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindow
    Private Declare Function SetForegroundWindow Lib "user32" _
        (ByVal hWnd As Long) As Long

'##################
'# private Member #
'#######prM########
    Private myHandle As Long

'#################
'# Public Events #
'#######PuE#######


'##############
'# Properties #
'#####prp######


'##################
'# Public Methods #
'#######PuM########


'#################
'# Event Handler #
'######EvH########
    Private Sub UserForm_Activate()
        'WindowHandle beim Aktivieren der UserForm Ermitteln.
        myHandle = FindWindow("ThunderDFrame", Me.Caption)
    End Sub
   
    Private Sub UserForm_Click()
        'Word starten, in den Vordergrund holen ...
        With CreateObject("Word.Application")
            .Visible = True
            AppActivate .Caption
        End With
        '... anschließend Mich selbst in den Vordergrund schieben
        SetForegroundWindow myHandle
    End Sub


Viele Grüße
derHöpp

[Nachtrag: Super zum Einlesen wie immer der großartige und leider viel zu früh verstorbene Chip Pearson: http://www.cpearson.com/Excel/formcontrol.aspx ]
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8117
Registriert: 14. Mai 2013, 11:08

Re: userform im Vordergrund

Beitragvon benny66 » 01. Aug 2019, 18:20

Hallo,
danke dir.
Ich muss mich da erst reindenken.
War längere Zeit weg und da nicht mehr dran.
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 685
Registriert: 22. Nov 2015, 21:56


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste