Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Timeout funktioniert nicht

Begonnen von hajott, März 12, 2026, 16:19:59

⏪ vorheriges - nächstes ⏩

hajott

Hallo Wissende,

mit untenstehendem Code lade ich ein zipfile aus dem Internet herunter und es klappt normalerweise perfekt. Heute gibts wohl ne Störung im Internet und das Programm bleibt beim
.send
hängen. In die dafür vorgesehene Verzweigung mit der Fehlermeldung kommt es gar nicht.

Habe mich im Netz dann schlau gemacht und gefunden, dass man
.SetTimeouts 10000, 10000, 10000, 10000für max 10 Sekunden Wartezeit nutzen kann. Allerdings bekomme ich eine Fehlermeldung ("Objekt unterstützt diese Eigenschaft oder Methode nicht"), ganz egal ob ich es vor oder nach dem. open einsetze.

Was mache ich falsch? Wie könnte ich das ggf. anders lösen?

Vielen Dank im voraus!

Hans-Jürgen

                Set objWeb = CreateObject("Microsoft.XMLHTTP")
                With objWeb
                    .Open "GET", txtURL & txtFilename, Fals
                    .send
                    If .Status = 200 Then
                        Set objStream = CreateObject("ADODB.Stream")
                        With objStream
                            .Open
                            .Type = 1
                            .Write objWeb.responseBody
                            .SaveToFile txtLocal & txtFilename, 2
                            .Close
                        End With
                    Else
                        MsgBox "No connection to " & txtURL & txtFilename
                    End If
                End With
                Set objWeb = Nothing

Debus

Einen Fehler habe ich schonmal nämlich einen Tippfehler

Das
.Open "GET", txtURL & txtFilename, Fals
muss
.Open "GET", txtURL & txtFilename, Falseso lauten.

Das 

Set objWeb = CreateObject("Microsoft.XMLHTTP")

würde ich änder in

Set objWeb = CreateObject("MSXML2.XMLHTTP")
' odereventuell wenn vorhanden:
' Set objWeb = CreateObject("MSXML2.XMLHTTP60")


Und 
Falscher Objekt-Typ deklariert
Achte darauf, dass im Code entweder gar nicht typisiert wird (Variant) oder korrekt, z.B.:
Dim objWeb As Object
' oder mit Verweis auf MSXML:
' Dim objWeb As MSXML2.XMLHTTP


also versuch mal so - aber ungetestet

Dim objWeb As Object
Dim objStream As Object

Set objWeb = CreateObject("MSXML2.XMLHTTP") ' oder "MSXML2.XMLHTTP60"

With objWeb
    .Open "GET", txtURL & txtFilename, False
    .send
    If .Status = 200 Then
        Set objStream = CreateObject("ADODB.Stream")
        With objStream
            .Open
            .Type = 1 ' adTypeBinary
            .Write objWeb.responseBody
            .SaveToFile txtLocal & txtFilename, 2 ' adSaveCreateOverWrite
            .Close
        End With
    Else
        MsgBox "No connection to " & txtURL & txtFilename
    End If
End With

Set objWeb = Nothing
Set objStream = Nothing


Falls es immer noch bei .send stehen bleibt, dann versuch es mal mit
Debug.Print TypeName(objWeb)
vor dem . send und  schauen mal was da so angezeigt wird.

Holger

PhilS

Zitat von: hajott am März 12, 2026, 16:19:59Habe mich im Netz dann schlau gemacht und gefunden, dass man
Code [Auswählen] Erweitern
.SetTimeouts 10000, 10000, 10000, 10000für max 10 Sekunden Wartezeit nutzen kann. Allerdings bekomme ich eine Fehlermeldung ("Objekt unterstützt diese Eigenschaft oder Methode nicht"), ganz egal ob ich es vor oder nach dem. open einsetze.
Soweit ich gerade überblicke, wird die setTimeouts-Methode nur von der ServerXMLHTTP60-Klasse implementiert.
Folglich für die Objekterstellung:
Set objWeb = CreateObject("MSXML2.ServerXMLHTTP60")
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Debus

Das war ja auch Teil meiner Einschätzung lass man wissen ob das zieht

Holger

hajott

Hallo zusammen und vielen Dank nochmal. Nein, XMLHTTP60 funktioniert nicht ("Objekterstellung ActiveX nicht möglich" oder so). Und wenn das die Basis für die Timeouts ist, kann ich das nicht abfangen. Ist nun mal so.

Holger: Bei mir steht da "FALSE", keine Ahnung, wie beim Rüberkopieren da mit einem Backspace wohl ein Zeichen abhanden gekommen ist. Auch deklariere ich alle Variablen, aber das war weiter oben und ich hab vergessen, das mit in den Codeausschnitt zu packen.

Viele Grüße

PhilS

Zitat von: hajott am Heute um 09:17:14, XMLHTTP60 funktioniert nicht ("Objekterstellung ActiveX nicht möglich" oder so).
Ah, ok, mein Fehler. Diese Objekte sind etwas tückisch, weil die Namen aus der Klassenbibliothek (für Early Binding) von denen abweichen, die in der Registry (für Late Binding) eingetragen sind.

So sollte es funktionieren:
Set objWeb = CreateObject("Msxml2.ServerXMLHTTP")

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor