Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Problem mit Excel 2013. UserForm
#1
   
Hallo zusammen,
ich habe da auch noch ein Problem mit Excel 2013.
Ich habe ein Sehr großes Programm in Excel 2010 geschrieben was auch wunderbar funktioniert aber jetzt mit 2013 eben nicht mehr: Das Problem ist, das ich über mehrere UserFormen Dateien öffne die dann auch geöffnet werden aber die UserForm nur in der ersten Datei aktiv und sichtbar ist die bereits vor dem öffnen der neuen Datei offen war. Wie kann ich eine Datei öffnen und die UserForm da zur Weiterverarbeitung aktivieren ??
Beispiel: Ich habe eine Datei offen die „Book1“ heißt.
Wenn ich jetzt über eine UserForm eine Datei öffne z.B. „specimenNeu.xlsx“ wird die Datei geöffnet aber die UserForm ist weg. Wenn ich auf „Book1“ klicke ist die UserForm da aktiv und sichtbar. Ich brauche die UserForm aber in der Datei „specimenNeu.xlsx“.
Ich hoffe das ich mein Problem beschreiben konnte?
Vielen Dank und viele Grüße,
Gerd
Antworten Top
#2
Moin!
Das Fenstermanagement hat sich mit Excel 2013 grundsätzlich geändert!
Google mal nach SDI

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hallo, 

setze doch die UF allwaysontop, das heißt, dass sie immer im Vordergrund ist, egal was man gerade aktiviert hat.

Vielleicht hilft es...

Code:

Private Declare PtrSafe Function FindWindowA Lib "user32" ( _
        ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetWindowPos Lib "user32" ( _
        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 HWND_TOPMOST = -1

Private Sub UserForm_Activate()
  SetWindowPos FindWindowA("ThunderDFrame", Me.Caption), HWND_TOPMOST, 0, 0, 0, 0, &H3
End Sub

_________
viele Grüße
Karl-Heinz
Antworten Top
#4
Hallo Ralf,
ich weiß das MS das  Multiple Document Interface (MDI)  durch das Single Document Interface (SDI) ersetzt hat.
Aber wie kann ich weiterhin mit meinem Programm arbeiten und die UserForm wieder in den neu geöffneten Dateien wieder aktivieren?
VG
Gerd

(21.03.2023, 11:20)volti schrieb: Hallo, 
setze doch die UF allwaysontop, das heißt, dass sie immer im Vordergrund ist, egal was man gerade aktiviert hat.
Vielleicht hilft es...


Hallo Karl-Heinz, vielen Dank. Aber...
wenn ich die Private Declare PtrSafe Function einstelle kommen Fehlermeldungen und ich kann die UserForm nicht mehr starten.
Die Fehlermeldungen bezieht sich auf das Argument "FindWindowA" und "SetWindowPos"
Antworten Top
#5
Oder wie kann man Excel2013 wieder zu einem   Multiple Document Interface (MDI) machen???

VG
Gerd
Antworten Top
#6
Hallo,

dieser Code ist jetzt für 32 und 64 Bit.....

Ansonsten die Declares als Public, also nicht Private in ein Modul setzen.

Code:

#If Win64 Then
 Private Declare PtrSafe Function FindWindowA Lib "user32" ( _
         ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
 Private Declare PtrSafe Function SetWindowPos Lib "user32" ( _
         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
#Else
 Private Declare Function FindWindowA Lib "user32" ( _
         ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 Private Declare  Function SetWindowPos Lib "user32" ( _
         ByVal Hwnd As Long, ByVal hWndInsertAfter As Long, _
         ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, _
         ByVal wFlags As Long) As Long
#End If

Private Const HWND_TOPMOST = -1

Private Sub UserForm_Activate()
  SetWindowPos FindWindowA("ThunderDFrame", Me.Caption), HWND_TOPMOST, 0, 0, 0, 0, &H3
End Sub

_________
viele Grüße
Karl-Heinz
Antworten Top
#7
(21.03.2023, 12:30)volti schrieb: Hallo,
dieser Code ist jetzt für 32 und 64 Bit.....
Ansonsten die Declares als Public, also nicht Private in ein Modul setzen.

Hallo Karl-Heinz, vielen Dank. Aber...
Die UserForm ist jetzt im Vordergrund.
Sobald ich einen neue Datei öffne und auf die UserForm für die nächste Bearbeitung Klicke wird wieder "Book1" aktiviert.
Das ist zum Haare raufen.

VG
Gerd
Antworten Top
#8
Ein userform kann jede geöffnete Datei bearbeiten.
Welche Datei 'aktiv' ist spielt keine Rolle.
ändere 'activeworkbook' in Workobooks("Name"), workbooks("Name").etc.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
Hallo snb,
es funktioniert.
Ist zwar nicht schön, aber damit kann ich leben.
Vielen Dank an alle die mir geholfen haben.

Viele Grüße,
Gerd
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste