Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Userform aktivieren?!

Userform aktivieren?!
Andre
Guten Morgen zusammen,
habe ein ganz merkwürdiges Problem:
ich habe eine umfangreiche Excel-Datei mit einer Vielzahl an Userformen, Makros und sonstigem VBA-Code für Excel 2000 geschrieben.
U.A. arbeite ich auch mit dem Ereignis "UserForm.activate". Dies stellt aber zunehmend ein Problem dar, da diese Ereignisse nicht mit Sicherheit auf jedem Rechner gleichermaßen bearbeitet werden. Der betreffende Code dieses Ereignisses umfaßt ca. 200 Zeilen und beinhaltet sowohl übliche If-Abfragen, als auch Datenbank-Abfragen, wobei der Umfang des Ereignis-Codes nicht relevant für dieses Problem zu sein scheint (siehe Beispiel-Datei!).
Der Unterschied der Bearbeitung liegt darin, dass einerseits dieses Ereignis korrekt ausgelöst wird, wenn die Userform aktiviert wird, also auch wenn ich über diese betreffende UF1 eine weitere UF2 aufrufe (ohne UF1 zu schließen) und dann UF2 wieder schließe, somit wird die ursprüngliche UF1 wieder aktiv (erkennbar durch die Blaufärbung der UF-Titelleiste im Gegensatz zum grau der inaktiven UserFormen!) und auch das Ereignis wird ausgelöst.
Andererseits wird auf manchen Rechnern dieses Ereignis lediglich dann ausgelöst, wenn UF1 auch initialisiert wurde, d.h. bei vorigem Beispiel würde das Ereignis nicht ausgelöst werden!
Kann mir jemand sagen, welche der beiden Aktionen exceltypisch ist und welche offensichtlich nicht? Ich vermute die erste Variante ist korrekt.
Oder kann das eine Einstellungssache sein?
Sollte es für dieses Problem keine sinnvolle Lösung geben, stellt mich dies vor ein enormes Problem, zwingt mich meine Datei komplett zu überarbeiten und wirft mich u.U. in der Entwicklung um mehrere Tage bis Wochen zurück, daher bin ich für jeden Rat sehr dankbar!
Zur Veranschaulichung lade ich eine Beispiel-Datei hoch, die, so hoffe ich, mein Problem ausreichend verdeutlicht:
https://www.herber.de/bbs/user/5787.xls
Gruß Andre
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Userform aktivieren?!
Kurt
Zeig die forms nicht modal an.
Kurt
AW: Userform aktivieren?!
Andre
Hi Kurt,
danke für deine Hilfe, aber die Anzeige "Showmodal = True" ist zwingend erforderlich, denn der User der Datei darf auf keinen Fall Zugriff auf "Hintergrund-Einstellungen" (Symbol-/ Menüleisten, Tabellen usw.) haben.
Trotzdem danke.
Gruß Andre
Anzeige
AW: Userform aktivieren?!
Kurt
Das solltest du gleich bei der Fragestellung erwähnen, dann könnte man sich
ggf. die Antwort verkneifen.
Da es anders aber nicht geht, musst du halt dennoch nicht modal anzeigen
und die Maus innerhalb des userforms "einsperren". Das geht allerdings
nur mit API- Funktionen.
Kurt
AW: Userform aktivieren?!
Andre
Okay, okay, hatte ich versäumt zu erwähnen, tut mir leid!
Eine andere Möglichkeit gibt es nicht? Aber warum funktioniert es dann gelegentlich?
mfg Andre
Anzeige
AW: Userform aktivieren?!
Kurt
Was weiß ich, was da in deinen forms abläuft. Da passieren teilweise
'zig Ereignisse fast gleichzeitig. Du willst doch auch sicher
keine Zufallslösung, oder?
Kurt
AW: Userform aktivieren?!
Andre
Alles klar, danke trotzdem für deine Hilfe!
mfg Andre
AW: Userform aktivieren?!
Kurt
Was bedeutet danke trotzdem, trotz was? Willst du eine Bestätigung
deiner Meinung oder ein Problem lösen?
Kurt
Anzeige
AW: Userform aktivieren?!
Andre
Hey, ganz ruhig bleiben! Was denn los mit dir? Wir arbeiten doch hier nicht gegeneinander.
"Danke trotzdem", weil du mir deinen Lösungsansatz deutlich machtest, der sowohl kompetent, als auch intelligent zu sein scheint, dennoch in dieser vorliegenden Situation aus bereits erwähnten Gründen nicht in Frage kommt und diesbezüglich nicht weiter verfolgt werden kann.
Dies bedeutet selbstverständlich nicht, daß deine Ausführungen fehlerhaft oder mißverständlich waren, sondern lediglich nicht den Anforderungen der vorliegenden Situation gerecht wurden.
Ich hoffe, - dieses Mal - eine Wortwahl getroffen zu haben, die für dich gleichermaßen höflich wie informativ war und verbleibe
mit freundlichen Grüßen.
Andre
Anzeige
AW: Userform aktivieren?!
Kurt
"in dieser vorliegenden Situation aus bereits erwähnten Gründen nicht in Frage kommt"
Ich habe die Erfahrung gemacht, dass sich(nicht auf dich bezogen) gerade
Anfänger auf eine Lösung versteifen, weil sie keine Alternativen kennen und
dann auch noch darauf beharren und für Alternativen gar nicht mehr offen
sind.
Du hast z.B. als Grund angegeben, dass nicht in den Tabellen "rumgemacht"
werden darf. Die Alternative hab ich dir genannt und du hast nichtmal
nachgefragt, wie das ggf. zu machen wäre. Also gehe ich davon aus, dass
es dir nicht um eine Lösung geht, sondern eine Bestätigung deiner
Meinung.
Kurt
Anzeige
Thread beendet!
Andre
Nein Kurt,
das bedeutet lediglich, daß ich diesen Lösungsansatz bereits in der Vergangenheit schon einmal in einem anderen Zusammenhang hatte und dieser zwar sehr elegant wäre und mir auch einige weitere positive Nebeneffekte bieten würde, aber diese Variante würde sehr wahrscheinlich den zeitlichen Rahmen für meine Entwicklungsphase überziehen, daher bin ich zwischenzeitlich auf einen etwas umständlichen, aber dennoch effektiven Lösungsansatz gekommen:
Die UserFormen besitzen generell aus einem anderen Grund eine "Controll-Textbox", die lediglich zur Kontrolle dient. Diese Textbox nutze ich nun, um mit Hilfe ihres Change-Ereignisses das Activate-Ereignis der Userform aufzurufen.
Wie gesagt, nicht elegant, aber effektiv und weniger zeitintensiv!
Also, bis dann.
mfg Andre
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform aktivieren in Excel VBA


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Öffne den VBA-Editor in Excel (ALT + F11). Füge eine neue UserForm hinzu, indem du im Projekt-Explorer mit der rechten Maustaste auf dein Projekt klickst und "Einfügen" > "UserForm" wählst.

  2. UserForm aktivieren: Um die UserForm aufzurufen, kannst du einen einfachen Code verwenden:

    Sub ShowUserForm()
       UserForm1.Show
    End Sub
  3. Ereignis "Activate" hinzufügen: Um das Activate-Ereignis zu nutzen, füge diesen Code in den Code-Editor der UserForm ein:

    Private Sub UserForm_Activate()
       MsgBox "Die UserForm ist aktiviert!"
    End Sub
  4. Testen: Führe das Makro ShowUserForm aus, um die UserForm zu aktivieren und zu testen, ob das Activate-Ereignis korrekt ausgelöst wird.


Häufige Fehler und Lösungen

  • Ereignis wird nicht ausgelöst: Wenn das Activate-Ereignis nicht auf manchen Rechnern ausgelöst wird, könnte es an unterschiedlichen Excel-Versionen oder -Einstellungen liegen. Stelle sicher, dass deine Excel-Version die Ereignisprozeduren unterstützt.

  • Modalität der UserForm: Wenn die UserForm nicht modal angezeigt wird (d.h. der Benutzer auf andere Fenster zugreifen kann), überprüfe die Einstellungen:

    UserForm1.Show vbModal
  • Konflikte mit anderen Makros: Wenn mehrere Makros gleichzeitig ablaufen, kann das die Triggerung des Activate-Ereignisses stören. Versuche, die Logik innerhalb deiner UserForm zu optimieren.


Alternative Methoden

  • API-Funktionen nutzen: Falls Du die UserForm modal anzeigen musst, aber trotzdem eine Art von Hintergrundzugriff benötigst, kannst du API-Funktionen verwenden, um die Benutzerinteraktion innerhalb der UserForm zu steuern.

  • Textbox als Trigger: Eine nützliche Methode ist das Verwenden einer unsichtbaren Textbox, deren Change-Ereignis das Activate-Ereignis der UserForm auslöst. Dies kann die Benutzererfahrung verbessern, besonders wenn das Activate-Ereignis manchmal nicht zuverlässig funktioniert.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Funktionsweise zu verdeutlichen. Angenommen, Du hast zwei UserForms, UserForm1 und UserForm2:

  • UserForm1 ruft UserForm2 auf:

    Private Sub CommandButton1_Click()
       UserForm2.Show
    End Sub
  • UserForm2 kehrt zu UserForm1 zurück:

    Private Sub CommandButton1_Click()
       Unload Me
       UserForm1.Show
    End Sub

So kannst Du zwischen UserForms wechseln und sicherstellen, dass das Activate-Ereignis deiner UserForm korrekt funktioniert.


Tipps für Profis

  • Debugging: Nutze die Debugging-Tools in VBA, um Fehler zu identifizieren. Setze Haltepunkte im Code, um die Ausführung zu überwachen und zu sehen, ob das Activate-Ereignis korrekt aufgerufen wird.

  • Optimierung des Codes: Halte deinen Code so schlank und effizient wie möglich. Vermeide redundante Abfragen und nutze strukturierte Fehlerbehandlung, um unerwartete Probleme zu vermeiden.

  • Dokumentation: Kommentiere deinen Code ausführlich, damit Du und andere Benutzer verstehen, wie und warum bestimmte Entscheidungen getroffen wurden.


FAQ: Häufige Fragen

1. Warum wird das Activate-Ereignis nicht immer ausgelöst? Es kann an unterschiedlichen Excel-Einstellungen oder an der Art und Weise liegen, wie die UserForms in verschiedenen Versionen von Excel implementiert sind.

2. Kann ich die UserForm auch nicht-modal anzeigen? Ja, es ist möglich, die UserForm nicht-modal anzuzeigen. Beachte jedoch, dass dies den Zugriff auf andere Excel-Elemente ermöglicht, was möglicherweise nicht gewünscht ist.

3. Wie kann ich sicherstellen, dass meine UserForm auf jedem Rechner funktioniert? Teste deine UserForm auf verschiedenen Rechnern und Versionen von Excel. Achte darauf, dass die VBA-Einstellungen und Sicherheitsstufen übereinstimmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige