2016-05-27 4 views
1

Ich habe dies seit einiger Zeit erforscht und ich habe den folgenden Code erstellt. Ich bekomme jedoch immer einen Fehler. Siehe unten.
Die Absicht dieses Codes ist es, ein HTML-Dokument zu erzeugen. Dann öffnet es und druckt das Dokument von einem Drucker. Ich habe die Datei zum Speichern erfolgreich und öffne sie sogar in einem IE-Fenster. Dann bekomme ich den Fehler.Drucken Sie eine HTML-Datei mit VBA

Function generateResults() 
    Dim resultsBrowser As SHDocVw.InternetExplorer 
    Set resultsBrowser = New SHDocVw.InternetExplorer 
    Dim resultsPath As String 
    Dim resultsFile As String 

    resultsPath = ThisWorkbook.Path & "\As-Run Test Results" 

    If Len(Dir(resultsPath, vbDirectory)) = 0 Then 
     MkDir resultsPath 
    End If 

    resultsFile = resultsPath & "\As-Run " & Format(Now, "mm-dd-yyyy hmmss") & ".html" 

    Open resultsFile For Output As #1 
    Print #1, "<html><title>Test</title><body>Hello World</body></html>" 
    Close #1 

    resultsBrowser.Navigate resultsFile 

    Do While resultsBrowser.ReadyState = READYSTATE_COMPLETE 
    Loop 

    resultsBrowser.Stop 

    resultsBrowser.ExecWB 7, 1 

    resultsBrowser.Quit 

    Set resultsBrowser = Nothing 
End Function 

Hier ist die Fehlermeldung.

Error Message

Wenn ich zu debuggen gehen, die VBA-Debugger verweist auf die folgende Zeile ein:

resultsBrowser.ExecWB 7, 1 

Was mache ich falsch? Meine Forschung zeigt, dass dies für andere funktioniert, aber es scheint nicht für mich zu funktionieren. Eine andere Kuriosität ist, dass, wenn ich zu ungefähr: leer anstelle der HTML-Datei navigiere und die ReadyState-Prüfschleife auskommentiere, eine leere Druckvorschau erfolgreich kommt.

+1

Ich vermute, Sie sagen wollen 'Do While resultsBrowser.ReadyState <> READYSTATE_COMPLETE'. Ansonsten kann ich bestätigen, dass dieser Code an meinem Ende funktioniert. Kannst du etwas mehr über deine Umgebung sagen? In welchem ​​Kontext läuft das? – owenfromcanada

+0

Sie müssen "InternetExplorerMedium" anstelle von "InternetExplorer" verwenden. – ib11

Antwort

0

Sie müssen InternetExplorerMedium statt InternetExplorer verwenden, wie in diesem Beitrag: https://stackoverflow.com/a/19221313/6201755

(Als Hinweis, diese klare für zukünftigen Anwender zu machen, das SHDocVw Objekt wird in dem Microsoft Internet enthaltenen Steuerelemente Präsenzbibliothek Stellen Sie sicher, diese Referenz in der VBE hinzuzufügen.)

Auch wie der Kommentar oben, macht diese Do While resultsBrowser.ReadyState = READYSTATE_COMPLETE Zeile macht es unendlich Schleife, so dass Sie es zu <> ändern müssen. Hier

ist der Arbeitscode:

Private Sub test() 

    Dim resultsBrowser As SHDocVw.InternetExplorerMedium 
    Set resultsBrowser = New SHDocVw.InternetExplorerMedium 
    Dim resultsPath As String 
    Dim resultsFile As String 

    resultsPath = ThisWorkbook.Path & "\As-Run Test Results" 

    If Len(Dir(resultsPath, vbDirectory)) = 0 Then 
     MkDir resultsPath 
    End If 

    resultsFile = resultsPath & "\As-Run " & Format(Now, "mm-dd-yyyy hmmss") & ".html" 

    Open resultsFile For Output As #1 
    Print #1, "<html><title>Test</title><body>Hello World</body></html>" 
    Close #1 

    resultsBrowser.Navigate resultsFile 

    Do While resultsBrowser.ReadyState <> READYSTATE_COMPLETE 
    Loop 

    resultsBrowser.Stop 

    resultsBrowser.ExecWB 7, 1 

    resultsBrowser.Quit 

    Set resultsBrowser = Nothing 

End Sub 
+0

Danke. Das hat perfekt funktioniert. Danke für den Fang auf der Endlosschleife. Ich war tatsächlich mit dem kommentiert, falls es ein Problem verursacht. Wahrscheinlich, warum ich es nicht bemerkt habe. – Grant