MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 19.01.2018, 12:38   #1
fischerpeter
Neuer Benutzer
Neuer Benutzer
Standard VBA - Userform verschwindet

Hallo,
ich habe mein Problem schon stundenlang in verschiedenen Foren versucht zu beseitigen, aber leider nichts passendes gefunden.

Also versuche ich es jetzt direkt, vielleicht hat ja jemand eine gute Idee:
Ich habe zwei Excel-Dateien. Mappe1a und Mappe3. Beim Öffnen von Mappe 3 erscheint eine Userform1, die beim Klicken auf Commandbutton1 die Datei Mappe1a öffnet. Bei Excel 2010 sah ich dann die geöffnete Datei Mappe1a und die Userform1, beides gleichzeitig. So sollte es sein. Nun haben wir vor ein paar Tagen Office 2016 bekommen, jetzt zeigt sich folgender Effekt: Ich sehe zwar die Mappe1a nach Klicken auf Commandbutton1, aber die Userform1 ist hinter Mappe1a versteckt innerhalb der Datei Mappe3. Einige Kollegen meinten, dass ab Version 2013 diese beiden Excel-Dateien in verschiedenen Instanzen geöffnet würden und sich deshalb dieses unerwünschte Verhalten zeigt.

Hat jemand eine Idee, wie ich wieder den alten Zustand herbeiführen kann, unter Beibehaltung von Office 2016? Also, ich möchte die Mappe1a und gleichzeitig die Userform1 sehen. Ich habe schon einiges ausprobiert, z.B. Application.visible oder an verschiedenen Stellen "Userform1.show vbmodeless", aber leider hat nichts funktioniert.

Viele Grüße
Peter
fischerpeter ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.01.2018, 13:17   #2
Nepumuk
MOF Koryphäe
MOF Koryphäe
Standard

Hallo Peter,

in das Modul des UserForms:

Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
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 Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"
Private Const HWND_TOPMOST As LongPtr = -1
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2

Private Sub UserForm_Initialize()
    Dim lngprtHwnd As LongPtr
    lngprtHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    Call SetWindowPos(lngprtHwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

__________________

Gruß
Nepumuk
Nepumuk ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.01.2018, 13:43   #3
fischerpeter
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Nepumuk,
ich habe deine Anregung bei mit eingefügt und siehe da, bei Aufruf vom Commandbutton1 funktioniert es so, wie ich mir das vorgestellt habe. Mappe1a im Vordergrund und die Userform1 ist sichtbar. Wenn ich jetzt aber auf den Commandbutton2 innerhalb derselben Userform1 klicke, ist wieder der unerwünschte Effekt zu sehen, die Mappe3 drängt sich in den Vordergrund und Userform1 bleibt aber sichtbar.

Zur Verdeutlichung hier mein Code innerhalb der Userform1:

Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
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 Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"
Private Const HWND_TOPMOST As LongPtr = -1
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2

Private Sub UserForm_Initialize()
Dim lngprtHwnd As LongPtr
lngprtHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
Call SetWindowPos(lngprtHwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

Private Sub CommandButton2_Click()
Workbooks("Mappe1a.xls").Sheets("Tabelle1").Range("b2") = "Hallo"
End Sub

Private Sub CommandButton1_Click()

Dim wb1 As Workbook
Dim Pfad As String

Pfad = "HatenMappe1a.xls"
Set wb1 = Workbooks.Open(Filename:=Pfad)

End Sub


Ich müsste also wieder die Mappe1a in den Vordergrund bekommen, fragt sich nur wie.

Gruß
Peter
fischerpeter ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.01.2018, 13:56   #4
Nepumuk
MOF Koryphäe
MOF Koryphäe
Standard

Hallo Peter,

das liegt am verworrenen Festerhandling von Excel ab Version 2013. Teste mal mit der Methode AppActivate die gewünschte Mappe hinter dem Userform zu aktivieren.

Eventuell hilft auch die Activate-Methode des Fensters.

__________________

Gruß
Nepumuk
Nepumuk ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.