2016-07-29 11 views
1

Ich verstehe nicht, warum ich dieses seltsame Verhalten bekomme! Beim Erstellen und Zuweisen des htmlfile-Objekts gibt die Funktion ein leeres Objekt ("nichts") zurück und wenn ich den Code zeilenweise ausfühle, läuft er automatisch, auch wenn ich F8 nicht drücke, um die nächste Zeile zu starten ... Es gibt keinerlei Fehler! Irgendwelche Ideen, was passieren könnte?SEHR seltsames Verhalten auf createobject ("HTMLFILE")!

Linie, wo das seltsame Verhalten beginnt: Set htmlObj = CreateObject("HTMLFILE")

Public Function XMLHTTP_Request(Method As String, URL As String, Optional PostData As String, Optional StrCookie As String) As HTMLDocument 

Dim oXMLHTTP As Object, htmlObj as object 
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") 
oXMLHTTP.Open Method, URL, False 
oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
oXMLHTTP.setRequestHeader "Cookies", StrCookie 

On Error GoTo ErrorHandler 
oXMLHTTP.send (PostData) 
On Error GoTo 0 

While oXMLHTTP.ReadyState <> 4: DoEvents: Wend 
While oXMLHTTP.Status <> 200: DoEvents: Wend 

Set htmlObj = CreateObject("HTMLFILE") 

htmlObj.body.innerHTML = oXMLHTTP.responseText 
Set XMLHTTP_Request = htmlObj 

End Function 
+1

* Hyper-Markup-Text-Sprache *? – Jeeped

+0

@pnuts: ok, entfernt es. – jony

+0

@Jeeped Ja, HTMLDocument. – jony

Antwort

1

wiederholte Aufrufe der Funktion werden mehrere Anrufe an die CreateObject function verursachen. Die oXMLHTTP- und htmlObj-Objektvariablen könnten statisch gemacht werden, oder Bibliotheksreferenzen könnten eingeschlossen werden, und die Variablendeklaration könnte in frühe Bindung geändert werden.

Frühzeitige Bindung erfordert, dass die folgenden nicht standardmäßigen Bibliotheksreferenzen über den VBE-Befehl Extras ► Verweise hinzugefügt werden.

  • Microsoft HTML Object Library
  • Microsoft Internet Steuert
  • Microsoft XML 6.0 (Ihre eigene Version leicht variieren kann).

Module1 Codeblatt:

Option Explicit 

Sub main() 
    Debug.Print Left(XMLHTTP_Request("http//example.com").body.innerText, 512) 
End Sub 

Public Function XMLHTTP_Request(URL As String, _ 
           Optional Method As String = "POST", _ 
           Optional PostData As String = "", _ 
           Optional StrCookie As String = "") As HTMLDocument 
    Dim oXMLHTTP As New MSXML2.XMLHTTP60 
    Dim htmlObj As New HTMLDocument 

    oXMLHTTP.Open Method, URL, False 
    oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    oXMLHTTP.setRequestHeader "Cookies", StrCookie 

    oXMLHTTP.send PostData 

    If oXMLHTTP.Status <> 200 Then Exit Function 

    htmlObj.body.innerHTML = oXMLHTTP.responseText 

    Set XMLHTTP_Request = htmlObj 

End Function 

Ausführen des main() Sub-Prozedur folgende Ausgabe die ersten 512 Zeichen des Textes der Webseite zu dem Direkt-Fenster ([Strg] + G).

+0

Du verdienst deinen gigantischen Ruf! Danke vielmals! – jony