Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro verzögert starten

Makro verzögert starten
31.07.2008 11:24:50
Gerd
Hallo zusammen!
Ich bitte euch, mir bei folgendem Problem zu helfen:
In einer Excel-Tabelle werden in einem ausgeblendeten Tabellenblatt beim Öffnen der Datei Daten aus einer externen Datenquelle (Access Datenbank auf einem entfernten Server) eingelesen.
Die Anwender müssen dann in einem teilweise geschützten Tabellenblatt verschiedene Daten eingeben.
Jetzt habe ich per VBA eine Userform erstellt, in der nebem dem Kalendersteuerlement zwei Kombinationsfelder enthalten sind. Die Userform wird beim Öffnen der Datei per Workbook_open aufgerufen.
Die Daten für die Kombinatiosfelder kommen aus dem oben beschriebenen ausgeblendeten Tabellenblatt.
Jetzt zum eigentlichen Problem:
Da die Userform beim Start aufgerufen wird, blockiert sie das einlesen der Daten aus der externen Datenquelle, sodass die Kombinationsfelder leer bleiben.
Rufe ich die Userform über eine Schaltfläche mit hinterlegtem Makro manuell auf, sind die Daten da. Die Userform ist also in Ordnung.
Auch ein verzögerter Aufruf der Userform mit Application.wait führt nur dazu, dass die Userform verzögert angezeigt wird; die Daten aus der externen Datenquelle werden aber trotzdem nicht eingelesen.
Wie bekomme ich es hin, dass die Datei richtig geladen wird - inklusive einlesen der externen Daten - und erst dann die Userform angezeigt wird?
Vielen Dank schon einmal im Voraus!
Gerd

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro verzögert starten
31.07.2008 12:42:00
Franc
wie sieht denn dein Makro aktuell aus?
wenn der 1. schritt "daten einlesen" ist und danach Userform aufrufen kommt, dann sollte die Userform erst aufgerufen werden, wenn auch die Daten eingelesen wurden.

AW: Makro verzögert starten
31.07.2008 12:59:40
Gerd
Hallo Franc!
Das Einlesen der Daten wird nicht von dem Makro erledigt, sondern über eine Abfrage der externen Datenbank (Daten --> externe Daten importieren).
Das Makro soll lediglich warten, bis die Daten eingelesen sind, und dann die Userform anzeigen. Das Makro sieht so aus:

Private Sub Workbook_Open()
Application.Wait (Now + TimeValue("00:00:04"))
UserForm1.Show
End Sub


Die hier angegebenen 4 Sekunden Wartezeit würden reichen, um die Daten über die Abfrage einzulesen.
Leider führt diese Form des Makros dazu, dass nur für 4 Sekunden die Anzeige der Userform hinausgezögert wird und bis zur Anzeige auch alles Weitere blockiert ist.
Wenn die Userform erscheint und ich sie schließe, sehe ich in der Satuszeile, wie dann erst die Abfrage ausgeführt wird.
Irgendeine Idee?
Gruß
Gerd

Anzeige
AW: Makro verzögert starten
31.07.2008 15:36:52
noffi
Hallo Gerd.
Versuche mal folgendes.
Für die UF gibt es eine Ereigniss dass sich "UserForm_Initialize" nennt. Führe da den Code zum einlesen Deiner Komboboxen aus. Wenn Das fertig ist, gibt Du am Ende dieser Prozedur den Befehl "Me.show" ein.
So werden die Felder erst gefüllt, und dann die UF angezeigt.
Gruß
noffi

Anzeige
AW: Makro verzögert starten
31.07.2008 15:52:00
Gerd
Hallo noffi!
Tja, das ist ja das Problem. Das Einlesen der Daten erfolgt nicht über VBA-code, sondern über die Abfrage einer externen Datenbank ("Daten - externe Daten importieren").
Was auch immer ich mit der Userform mache; sie behindert das Einlesen der Daten. Gibt es nicht irgendein Kommando, nachdem ein Makro so-und-so-viel Sekunden nach Öffnen der Datei aufgerufen wird und damit auch erst die Userform?
Danke nochmals!
Gerd

Anzeige
AW: Makro verzögert starten
31.07.2008 17:45:21
Klaus
Hi,
mit wait hälts du die ganze Application an, nimm ein OnTime-Makro.
mfg Klaus

AW: Makro verzögert starten
01.08.2008 07:24:00
Gerd
Hallo Klaus!
Vielen Dank für den Tipp!
Jetzt wird die Anwendung nicht mehr aufgehalten und die Kombi-Felder sind befüllt.
Super!
Gruß
Gerd
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro verzögert starten in Excel


Schritt-für-Schritt-Anleitung

  1. Daten einlesen: Stelle sicher, dass die Daten aus der externen Datenquelle (z.B. Access-Datenbank) im Hintergrund eingelesen werden, bevor du die Userform anzeigst.

  2. Makro anpassen: Verwende anstelle von Application.Wait die Application.OnTime Methode, um die Userform nach einer bestimmten Zeit zu öffnen, ohne die gesamte Anwendung zu blockieren.

    Hier ein Beispiel für das angepasste Makro:

    Private Sub Workbook_Open()
       Application.OnTime Now + TimeValue("00:00:04"), "ShowUserForm"
    End Sub
    
    Sub ShowUserForm()
       UserForm1.Show
    End Sub
  3. Userform-Initialisieren: Wenn du Daten in die Kombinationsfelder deiner Userform einfüllen möchtest, führe den entsprechenden Code im UserForm_Initialize-Ereignis aus, bevor die Userform angezeigt wird.


Häufige Fehler und Lösungen

  • Fehler: Userform blockiert das Einlesen der Daten.

    • Lösung: Verwende Application.OnTime, um die Userform anzuzeigen, nachdem die Daten eingelesen wurden, anstatt Application.Wait, das die gesamte Anwendung anhält.
  • Fehler: Kombinationsfelder bleiben leer.

    • Lösung: Stelle sicher, dass die Logik zum Einlesen der Daten in die Kombinationsfelder in der UserForm_Initialize-Prozedur korrekt implementiert ist.

Alternative Methoden

  • Timer verwenden: Anstatt die Userform nach einer festen Zeit zu starten, kannst du auch einen Timer verwenden, der überprüft, ob die Daten vollständig geladen sind.

  • Ereignisgesteuertes Programmieren: Nutze VBA-Ereignisse, um die Userform nur dann zu laden, wenn die Daten erfolgreich eingelesen wurden.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Userform effektiv mit Daten füllen kannst:

Private Sub UserForm_Initialize()
    ' Annahme: Die Daten sind im ausgeblendeten Blatt "Daten"
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")

    ' Kombinationsfeld füllen
    Me.ComboBox1.AddItem ws.Range("A1").Value
    Me.ComboBox2.AddItem ws.Range("A2").Value
End Sub

Mit diesem Ansatz werden die Kombinationsfelder gefüllt, bevor die Userform angezeigt wird.


Tipps für Profis

  • Debugging: Verwende Debugging-Tools in VBA, um sicherzustellen, dass deine Daten korrekt eingelesen werden, bevor die Userform angezeigt wird.

  • Optimierung: Wenn du häufig große Datenmengen abfragst, überlege, ob du die Daten im Hintergrund abrufen kannst, um die Performance zu verbessern.

  • Benutzerfreundlichkeit: Achte darauf, dass die Userform intuitiv gestaltet ist. Fülle die Kombinationsfelder im Voraus, um den Benutzern ein besseres Erlebnis zu bieten.


FAQ: Häufige Fragen

1. Warum wird die Userform nicht angezeigt, wenn ich Application.Wait verwende?
Application.Wait blockiert die gesamte Excel-Anwendung, wodurch auch das Einlesen der Daten gestoppt wird. Verwende stattdessen Application.OnTime.

2. Wie kann ich sicherstellen, dass die Userform nur angezeigt wird, wenn die Daten vollständig geladen sind?
Implementiere eine Logik in deinem Makro, die sicherstellt, dass die Userform erst geöffnet wird, nachdem die Daten erfolgreich eingelesen wurden, z.B. durch die Verwendung von UserForm_Initialize.

3. Was mache ich, wenn meine Kombinationsfelder immer noch leer bleiben?
Überprüfe die Datenquelle und stelle sicher, dass die Daten korrekt in die Kombinationsfelder gefüllt werden, indem du den Code im UserForm_Initialize-Ereignis verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige