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

Forumthread: Warten bis etwas fertig ist

Warten bis etwas fertig ist
05.05.2006 15:47:52
Hugo
Hallo Excelfreunde
Mein Problem ist folgendes.
Ich starte mit folgendem Befehl ein Browserfenster. Mit der letzten Zeile
wird eine Vorlage von einem Server auf meine lokale Umgebung geladen.
-------------------------------------------------------------------------------

Sub ieStart1()
Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate <a href="("http://forms.post.ch/frmSubscriber.asp?docID=2103&strSPC=D")">("http://forms.post.ch/frmSubscriber.asp?docID=2103&strSPC=D")</a>
End Sub

--------------------------------------------------------------------------
Nun habe ich das Problem, dass dieses Fenster erst geschlossen werden darf wenn diese Arbeiten abgeschlossen sind.
Kann ich im VBA "irgend etwas" (wait, stop, usw.) eingeben was dieses Warten macht?
Das Schliessen dieses Fensters kann ich bereits machen.
s. Code weiter unten
zum schliessen
--------------------------

Sub ieClose1()
If Not ie Is Nothing Then
ie.Quit
Set ie = Nothing
End If
End Sub

Danke für einen Hinweis
Hugo
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Warten bis etwas fertig ist
05.05.2006 16:09:07
UweD
Hallo
dieser Befehl wartet z.B. 7 sekunden.
Application.Wait Now + TimeValue("00:00:07")
Gruß UweD
(Rückmeldung wäre schön)
AW: Warten bis etwas fertig ist
05.05.2006 23:08:33
Josef
Hallo Hugo!
Das geht so!
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub ieStart1()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
  .Visible = True
  .Navigate "http://forms.post.ch/frmSubscriber.asp?docID=2103&strSPC=D"
  Do
    Sleep 250
  Loop Until .Busy = False
  .Quit
End With
Set ie = Nothing
End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Warten bis etwas fertig ist
08.05.2006 14:17:49
Hugo
Hallo Sepp
Danke für die Lösung.
Ich habe diese bei mir eingebaut und es läuft.
Eine ganz kleine Zusatzfrage habe ich aber dazu. Es ist ja so, dass hier ein Timer abläuft.
Je nach PC reicht eine eingegebene Zeit kaum und auf einem anderen dauert es sehr lange.
Gibt es einen "Trick" das Abschliessen der Aufgabe die im Browser gemacht wird abzufragen und erst dann das Fenster zu schliessen?
Somit würde das Browserfenster solange offen bleiben wie es muss unabhängig ob ich einen schnellen oder langsamen PC habe.
Gruss
Hugo
Anzeige
AW: Warten bis etwas fertig ist
08.05.2006 17:34:01
Josef
Hallo Hugo!
Genau das macht mein Code!
Mit "Loop Until .Busy = False" wird der Status des Browsers gecheckt!
Die "Sleep" anweisung ist nur dazu da, um die Do-Loop-Schleife etwas zu "Bremsen"!
Es genügt ja, wenn alle 250 ms geprüft wird, ob der Browser fertig ist.
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Warten bis etwas fertig ist
09.05.2006 07:44:04
Hugo
Hallo Sepp
Da bin ich doch ein kleiner VBA-Depp. Nein Spass beseite.
Damit habe ich genau das erhalten was ich brauche. Und das ganze ist auch sehr professionell.
Ich bin immer wieder überrascht was Ihr so alles drauf habt.
Nochmals besten Dank.
Gruss
Hugo
AW: Warten bis etwas fertig ist
08.05.2006 14:37:43
Hugo
Hallo UweD
Danke!! Deine Lösung ist gut und hilft mir wirklich weiter.
Das einzige was noch offen ist, ist die Zusatzfrage die ich im E-Mail an Sepp
noch festgehalten habe.
Gruss Hugo
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Effektive Nutzung von Warten in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu warten, bis eine Aufgabe abgeschlossen ist, kannst du den folgenden Code verwenden. Dieser überprüft kontinuierlich den Status des Browsers, bis dieser nicht mehr beschäftigt ist:

Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub ieStart1()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate "http://forms.post.ch/frmSubscriber.asp?docID=2103&strSPC=D"

        Do
            Sleep 250 ' Warten für 250 Millisekunden
        Loop Until .Busy = False ' Warten bis die Aktualisierung abgeschlossen ist

        .Quit
    End With
    Set ie = Nothing
End Sub

In diesem Beispiel wird der Sleep-Befehl verwendet, um die Schleife alle 250 Millisekunden zu unterbrechen, sodass der Browser nicht überlastet wird.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"

    • Lösung: Stelle sicher, dass du den Internet Explorer korrekt instanziierst und dass die URL gültig ist.
  • Fehler: Die Schleife läuft unendlich

    • Lösung: Überprüfe, ob die Bedingung für die Schleife korrekt formuliert ist. Die .Busy-Eigenschaft sollte False werden, wenn der Browser nicht mehr beschäftigt ist.

Alternative Methoden

Eine Alternative zur Verwendung von Sleep ist der Application.Wait Befehl, der wie folgt aussieht:

Sub WaitExample()
    Application.Wait Now + TimeValue("00:00:07") ' Warten für 7 Sekunden
End Sub

Beachte, dass Application.Wait den gesamten Excel-Prozess pausiert, während Sleep nur das aktuelle Makro stoppt.


Praktische Beispiele

Wenn du eine Aufgabe hast, die eine bestimmte Zeit in Anspruch nimmt, kannst du auch DoEvents verwenden, um sicherzustellen, dass Excel während des Wartens weiterhin reagiert:

Sub WaitWithDoEvents()
    Dim startTime As Double
    startTime = Timer ' Startzeit

    Do While Timer < startTime + 5 ' Warten für 5 Sekunden
        DoEvents ' Ermöglicht Excel, weiterhin zu reagieren
    Loop
End Sub

Tipps für Profis

  • Verwende Sleep, um die CPU-Belastung während des Wartens zu reduzieren.
  • Achte darauf, dass du die Zeit, die du wartest, dynamisch anpassen kannst, um die Leistung auf unterschiedlichen PCs zu optimieren.
  • Die Verwendung von DoEvents in langen Schleifen kann helfen, Excel responsiv zu halten.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Browser vollständig geladen ist, bevor ich fortfahre?
Verwende die .Busy-Eigenschaft in einer Schleife, um den Status des Browsers zu überprüfen.

2. Was ist der Unterschied zwischen Application.Wait und Sleep?
Application.Wait stoppt den gesamten Excel-Prozess, während Sleep nur das aktuelle Makro anhält.

3. Kann ich den Wait-Befehl auch in Access VBA verwenden?
Ja, du kannst Access VBA verwenden, aber das spezifische Warten erfordert die Verwendung von Application.Wait oder einer ähnlichen Funktion in Access.

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