Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
388to392
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
388to392
388to392
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dialog verliert während Makro den Fokus

Dialog verliert während Makro den Fokus
02.03.2004 11:56:09
Alfred
Halli,
ich habe mal wieder ein nicht so ganz trivial scheinendes Prob, das ich auch nach längerer Recherche im Forum nicht lösen kann.
Ich las Fragen der Art "wie kann ich während der Anzeige einer UserForm in ein Sheet zur Bearbeitung wechseln?" mit mehr oder weniger verqueren Workarounds.
Nun habe ich eine Variante unfreiwillig gefunden, die mich zudem stört.
Mein Code arbeitet in einem Workbook mit 2 Tabellen.
Tab A bietet dem Nutzer die Möglichkeit, Varianten für den Ausdruck von Tab B zu bestimmen. Er gibt also dort irgendwas in Zellen ein.
Tab B ist veryHidden und gibt nur das Format für den Ausdruck der in Tab A gemachten Angaben vor.
Über eine UserForm wird nun der Ausdruck von Tab B ausgelöst.
Dazu habe ich im Click-Ereignis eines Buttons folgenden Code:

(1)    sheetB.Visible = xlSheetVisible
' die einzelnen Varianten abturnen
(2)    For Each variante In variantenListe
' ... ein paar Zellen in Tab B gemäß Werten in Tab A ändern
' die Änderungen übernehmen
(3)            sheetB.Calculate
' ausdrucken
(4)            sheetTabelle.PrintOut
Next variante
' die geheime Tabelle wieder verstecken
(5)    sheetTabelle.Visible = xlSheetVeryHidden
(6)    ' Dialog hat hier leider den Focus verloren

Intention:
(1) macht Tab B sichtbar, ohne das scheitert PrintOut weiter unten
(2) turnt die in Tab A vorgegebenen Varianten ab
Für jede Variante werden nun in Tab B ein paar Zellen geändert
(3) ist offenbar nötig, die Änderungen zu übernehmen
(4) druckt die aktuelle Variante der Tab B
(5) verbirgt die Tab B wieder
und nun kommt der Moment, wo der Elefant das Wasser läßt:
bei (6) hat die UserForm den Fokus verloren, man findet sich plötzlich in Tab A wieder, obwohl UserForm noch geöffnet ist (aber gegraut eben) und kann fleißig in Tab A hin und her wandern.
Alt-Tab belebt die UserForm wieder (die Titelzeile wird wieder wie "aktiv" gefärbt). Wenn ich aber im Makro an Pos (6)

SendKeys "%{TAB}", [TRUE | FALSE]

schreibe, passiert nix.
UserForm.Hide - UserForm.Show kommt erst einmal nicht infrage, weil der Dialog dann die vom Nutzer gemachten Änderungen verliert.
Wie mache ich die UserForm im Makro wieder aktiv?
Danke für die Aufmerksamkeit.
Alfred

                    

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dialog verliert während Makro den Fokus
02.03.2004 16:28:54
Ulf
"UserForm.Hide - UserForm.Show kommt erst einmal nicht infrage, weil der Dialog dann die vom Nutzer gemachten Änderungen verliert."
Das ist ganz einfach falsch! Nur wenn du das Form mit unload schließt,
gehen die Daten verloren.
Ulf
AW: Dialog verliert während Makro den Fokus
03.03.2004 12:03:38
Alfred
Hallo Ulf,
ich will nicht rechthaberisch sein, gebe auch gern zu, daß meine Aussage etwas mißverständlich war, also:
Zur besseren Orientierung für den Nutzer pflege ich die UserForms mit StartupPosition=1 (CenterOwner) zu versehen, was ja aber nicht jedem Nutzer unbedingt passen muß.
Verschiebt er folglich die UserForm, wird sie nach der Hide-Show-Orgie allerdings wieder zentriert. Das gibt - besonders wenns nur um die Reaktivierung der UserForm geht und der Nutzer zu dem Zeitpunkt eigentlich gar nicht mit der UserForm interagiert hat - ein
l[u|ä]stiges Fenstergehopse auf dem Bildschirm.
StartupPosition=0 (Manual) behebt dies, läßt die UserForm aber bei ihrer ersten Erscheinung auf Koordinate Nullnull flitzen, und ich habe eigentlich nicht wirklich Lust, wegen des Fokus-Problems noch eine Berechnung der Startkoordinaten in Abhängigkeit vom Ownerfenster anzustellen.
Sicher, auch das kann ich beheben, indem ich der UserForm vor der ersten Show StartupPosition=CenterOwner und danach bis zum richtigen (also wirklich so gemeinten) Hide StartupPosition=Manual zugestehe.
Wenn ich mit diesen verquerulierenden Workarounds um mich schmeiße, muß ich sie dummerweise sehr ausführlich kommentieren,
  • damit sie später jemand deuten kann, der sich um meine Quältexte scheren muß
  • damit dieser jemand nicht sagt: "Was hat der denn für einen Scheiß programmiert? Das geht doch viel einfacher!" - dann freilich mit Office-Version 25.9 - und so meine Bezahlung infrage stellt ;-).
Und ehe ich nun die obigen Fallstudien im Quelltext breittrete, dachte ich, es gibt ein einfaches Activate oder so, das sozusagen straight forward, selbsterklärend ist.
Aber ich finde einfach nüscht.
Desderwegen meine Frage hier.
Aber nichts für ungut.
Alfred
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige