Mit Word-Makro HTML-Dateien im IE öffnen und druck

Hallo,

weiß jemand zufällig eine Bezeichnung für html-Dateien, die von vb nicht abgelehnt wird?

Ich bin kein Profi, habe mir aber ein Skript (ursprünglich zum Suchen und Drucken von Worddokumenten) entsprechend anpassen wollen:

Sub print_htm ()

’ Print HTML-Files

With Application.FileSearch
.NewSearch
.FileName = „*.htm“
.LookIn = „C:\blablabla“
.SearchSubFolders = True
If .Execute() > 0 Then
ReDim strdateien(.FoundFiles.Count)
ReDim strZugehOrdner(.FoundFiles.Count)

'Durchläuft alle Dateien aus obigem VZ
For i = 1 To .FoundFiles.Count

strdateien(i) = .FoundFiles(i)
strZugehOrdner(i) = .FoundFiles(i)
Do
strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) - InStr(strdateien(i), „“)))
Loop While InStr(strdateien(i), „“) > 0

‚‘’’’’’’'BIS HIER ALLES OK

Documents.Open FileName:=strZugehOrdner(i)

‚‘’’ ^^^^HIER weiß ich nicht, was ich anstelle von Documents angeben soll bzw. wie ich es schaffe, das die HTM-Dateien mit dem IE geöffnet werden…

Application.PrintOut
ActiveDocument.Saved = True 'verhindert Speichernachfrage
ActiveDocument.Close
'schließt das Dokument nach dem Drucken

Next i
End If
End With
End Sub

Ich hoffe, jemand kann mir helfen. :smile:

Vielen lieben Dank im Voraus,

lenti

Documents.Open FileName:=strZugehOrdner(i)
‚‘’’ ^^^^HIER weiß ich nicht, was ich anstelle von Documents
angeben soll bzw. wie ich es schaffe, das die HTM-Dateien mit
dem IE geöffnet werden…

Hallo Lenti,

der Code öffnet lokal auf dem Rechner gespeicherte html/htm-Dateien.

Eine Html-Seite im Internet kannst du schon mit Word-Vba im IE aufrufen lassen und ggf.s auch auslesen, dazu brauchst du aber die genaue komplette Webadresse wie
http://www.wer-weiss-was.de
und natürlich anderen Code.

Gruß
Reinhard

Hallo Lenti,

der Code öffnet lokal auf dem Rechner gespeicherte
html/htm-Dateien.

Das ist ja auch richtig so :smile:

Eine Html-Seite im Internet kannst du schon mit Word-Vba im IE
aufrufen lassen und ggf.s auch auslesen, dazu brauchst du aber
die genaue komplette Webadresse wie
http://www.wer-weiss-was.de
und natürlich anderen Code.

Gruß
Reinhard

Erstmal Dankeschön :smile:

Ich glaube ich muss das noch genauer erklären:

Also es ist so: Der Code war ursprünglich auf *doc ausgelegt, ich habe ihn auf *htm geändert - und ebenfalls die Durchsuchung der Unterordner (SearchSubFolders = True) dazugenommen.

Es geht auch nicht um files im web die aufgerufen und durchsucht werden sollen, sondern tatsächlich files, die hier auf dem server liegen und gedruckt werden sollen.

Das funktioniert soweit ja auch alles wunderbar - der angegebene Ordner (samt Unterordner) wird durchsucht nach .htm - diese werden auch alle nacheinander geöffnet und gedruckt - aber eben in Word, was falsch ist (Format!). Sie sollen im Browser geöffnet und dann von dort aus gedruckt werden - und hier bin ich am Ende mit meinem Latein.

Ideen oder Vorschläge? Bin für alles dankbar.

Danke, Lenti

Ps.: Das Ganze will ich später (->.bas speichern und kompilieren zu .exe) aus einem anderen Programm heraus aufrufen, welches bestimmte Ordner nach Eingabe meherer Parameter öffnet - und eben diese Ordner sollen dann durchsucht werden und die .htm-files gedruckt; dafür bekommt dann obiger code die feste Angabe „.LookIn = ActiveWindow“…

Hallo,

also öffnen bekomme ich schonmal hin … fehlt ja nur noch das drucken :smile:
Da habe ich noch garkeinen Ansatz … vielleicht ist ja jemand unterwegs, der das noch ergänzen kann.

Sub print_htm()
Dim IeApp As Object
Set IeApp = CreateObject(„InternetExplorer.Application“)
With Application.FileSearch
.NewSearch
.FileName = „*.htm“
.LookIn = „C:\Test“ ’ 0 Then
ReDim strdateien(.FoundFiles.Count)
ReDim strzugehordner(.FoundFiles.Count)

For i = 1 To .FoundFiles.Count

strdateien(i) = .FoundFiles(i)
strzugehordner(i) = .FoundFiles(i)
Do
strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) - InStr(strdateien(i), „“)))
Loop While InStr(strdateien(i), „“) > 0
IeApp.Visible = True
IeApp.navigate2 strzugehordner(i), 1
Next i
End If
End With
End Sub

Das funktioniert soweit ja auch alles wunderbar - der
angegebene Ordner (samt Unterordner) wird durchsucht nach .htm

  • diese werden auch alle nacheinander geöffnet und gedruckt -
    aber eben in Word, was falsch ist (Format!). Sie sollen im
    Browser geöffnet und dann von dort aus gedruckt werden - und
    hier bin ich am Ende mit meinem Latein.

Hallo lenti,

okay, ich dacht mir schon sowas, wußte es aber nicht genau.

Gut, lassen wir erst mal deinen Code beiseite und schauen erstmal ob wirs mit nur einer Datei hinkriegen die über den IE auszudrucken.

So öffnet man den IE mit einer datei:

Sub tt()
Dim appIE
On Error Resume Next
Set appIE = GetObject(, "InternetExplorer.Application")
If Err.Number 0 Then Set appIE = CreateObject("InternetExplorer.Application")
On Error GoTo 0
With appIE
 .Visible = True
 .navigate "Pfad/Datei"
End With
End Sub

Jetzt weiß ich zwar daß man nun den Inhatlt der Seite mit innerhtml bzw. innertext auslesen kann.
Aber ausdrucken, weiß grad nicht obs dafür einen befehl gibt.
Vielleicht weiß Rainer da ja was.

Ps.: Das Ganze will ich später (->.bas speichern und
kompilieren zu .exe)

Word-Vba-Code zu einer exe kompilieren? Ich bezeifle daß das geht.

Vielleicht ginge eine .bat die du mit Parametern startest. Diese batch schreibt dann die parameter in eine bestimmte Txt-Datei und startet dann in Word eine bestimmte Word-datei die beim Öffnen einen Code ausführt, der wiederum nun diese bestimmte txt-datei ausliest usw.
Ich hoffe das war verständlich.

Mal ein ungetestes Beispiel für so eine batch

Echo %%1 > c:\test\Param.txt
Echo %%2 >> c:\test\Param.txt
Echo %%3 >> c:\test\Param.txt
Echo %%4 >> c:\test\Param.txt
C:…\winword.exe c:…\Meinedatei.doc

Gruß
Reinhard

Hallo Reinhard,

Aber ausdrucken, weiß grad nicht obs dafür einen befehl gibt.
Vielleicht weiß Rainer da ja was.

http://www.activevb.de/tipps/vb6tipps/tipp0727.html

-)

Gruß Rainer

Aber ausdrucken, weiß grad nicht obs dafür einen befehl gibt.
Vielleicht weiß Rainer da ja was.

http://www.activevb.de/tipps/vb6tipps/tipp0727.html

Hallo Rainer,

danke, ich wußt ja gleich das ist kinderleicht zu lösen *gggg*

Und wenn ich gleich oben sowas lese:
Anstelle der Funktion DrawToDC des IHTMLElementRender-Interfaces wird
hier der Umweg über die Funktion OleDraw genommen. Ein indirekter
Aufruf der Funktion Draw des IViewObject-Interfaces

dann habe ich so Urreflexe, die Seite gleich wieder zuzumachen :smile:

Okay, warte ich erstmal ab der Anfrager den Code testet und ob das Ergebnis das ist was er will.

Ich habe da so meine Zweifel.

Wenn ich manuell eine Seite mit dem IE öffne, so kann ich diese doch auch ausdrucken.

Wieso hat da MS nicht ein .PrintOut o.ä. implementiert in VB, Vba wenn ich da schon mit CreateObject den IE aufrufen kann?

Gruß
Reinhard

Das funktioniert soweit ja auch alles wunderbar - der
angegebene Ordner (samt Unterordner) wird durchsucht nach .htm

  • diese werden auch alle nacheinander geöffnet und gedruckt -
    aber eben in Word, was falsch ist (Format!). Sie sollen im
    Browser geöffnet und dann von dort aus gedruckt werden - und
    hier bin ich am Ende mit meinem Latein.

Hallo Lenti,

mal ein anderer Ansatz, ich habe es nicht nachgespielt, aber du sagst die gleiche Htm im IE ausgedruckt sähe anders aus als die gleiche Htm in Word.
Du erwähnst „Format“. Was genau meinst du?

Die Grundidee dabei ist, Word mag ja die Htm darstellen wie es will, mit Vba kann man aber die Htm auslesen, auch alle Formatierungsbefehle, die müssen da ja drinstehen, dann müßte m.M. nach möglich sein dadurch den Word-Ausdruck so zu formatieren wie es der IE wohl macht.

Negativ dabei ist, kann ne heidenarbeit werden und ich weiß nicht ob ich dazu Lust habe.

Gruß
Reinhard

Hallo Reinhard,

danke, ich wußt ja gleich das ist kinderleicht zu lösen *gggg*

*gg* ich habe keine Ahnung, ob das mit VBA realisierbar ist.
Das würde ich Dich fragen … falsch. Das frage ich Dich gerade. :smile:

Wenn ich manuell eine Seite mit dem IE öffne, so kann ich
diese doch auch ausdrucken.

Wieso hat da MS nicht ein .PrintOut o.ä. implementiert in VB,
Vba wenn ich da schon mit CreateObject den IE aufrufen kann?

hmmm, das habe ich noch nie versucht. Ich habe auch keine Ahnung, welche Eigenschaften das Objekt dann hat. Testen fällt auf dem Mac im Moment etwas schwer. :smile: In die Firma komme ich erst nächste Wochge wieder … (Kurzarbeit)

Gruß Rainer

Hallo Rainer,

danke, ich wußt ja gleich das ist kinderleicht zu lösen *gggg*

*gg* ich habe keine Ahnung, ob das mit VBA realisierbar ist.
Das würde ich Dich fragen … falsch. Das frage ich Dich
gerade. :smile:

? wwieso redest du dich mit Hinweis auf VBA aus der Sache heraus?
In Vb wird ja wohl auch so eine Htm-Datei durch CreateObject und dann .Navigate geöffnet.
Wie druckt man sie nun so aus wie es geschehe wenn man das manuell im IE tun würde.

Ich weiß das nicht, aber warten wirs ab, ich habe bei den Excelgöttern nachgefragt, mal schauen was kommt :smile:

hmmm, das habe ich noch nie versucht. Ich habe auch keine
Ahnung, welche Eigenschaften das Objekt dann hat.

Dito, Intellisense kommt nicht :frowning:
Irgendwo auf den MS-Seiten wird das stehen, aber hab ich grad keinen Link dahin.

Gruß
Reinhard

Hallo Reinhard,

? wwieso redest du dich mit Hinweis auf VBA aus der Sache
heraus?

ich habe den Code nur ganz grob überflogen, einige API-Deklarationen gesehen. Das läuft auf Handles hinaus und ob das dann so mit VBA realisierbar ist, weiß ich nicht. Ich weiß nur noch, daß wir mal mit VBA etwas in dieser Richtung versucht haben und ich glaube wir sind an den fehlenden Handles gescheitert.

Gruß Rainer

Okay, warte ich erstmal ab der Anfrager den Code testet und ob
das Ergebnis das ist was er will.

Hallo ihr Beiden,

erstmal vielen Dank für die Mühen - ich werde das auf jeden Fall austesten - zudem wieder eine gute Mögichkeite neues dazuzulernen.

…KÖNNTE dann EVENTUELL ein ganz kleines bisschen dauern, bis ich das alles hingebekommen habe :smile: Aber ich gebe auf alle Fälle eine Rückmeldung!

Zu den .exe -> werde das mit QuickBasic 4.5 ausprobieren - ist wohl schon was älter das gute Stück, soll aber dennoch ausgelagerte .bas zu .exe wandeln können… Ich bin selbst gespannt :smile:

Mit bestem Dank,
Die Anfragerin :smile:

http://www.activevb.de/tipps/vb6tipps/tipp0727.html

-)

Gruß Rainer

Alles klar! Jawohl!

[…]

…ich geh’ dann mal wieder…

Nee, im Ernst, das ist mir echt ein bisschen zu hoch. Ihr versteht es, einen am frühen Morgen schon kräftig zu erschrecken :wink:

JAA, das kann also wirklich dauern, bis ich mich durchgebissen habe.

Lenti

Hallo,

wieviel soll von dem angezeigten Dokument gedruckt werden?

Wenn das ganze Dokument gedruckt werden soll, geht es nicht ohne den Code weiter unten.

Wenn der sichtbare Teil genügt, kann man ja einen Screnshot schießen …
http://www.activevb.de/tipps/vb6tipps/tipp0078.html
… und den drucken. Mangels Excel habe ich das mit VBA aber auch noch nicht versucht.

Aber was willst Du mit Quickbasic? Haben die prozedurorientierten Programmiersprachen nicht mit VB4 angefangen? Aber selbst VB4 war noch eine Interpretersprache, kompiliert wurde erst ab VB5.

Wenn Du das Ergebnis unbedingt zur .exe kompilieren wilst und kein VB5/VB6 hast, dann wird Dir nur VB.NET, also VB 2008 Express bleiben.
Da nützt Dir der Code von Reinhard allerdings wenig, in .NET ist alles anders. Deshalb haben wir hier auch zwei Zeilen weiter oben ein eigenes Brett dafür.

Gruß Rainer

Hallo,

JAA, das kann also wirklich dauern, bis ich mich durchgebissen
habe.

wenn Du wirklich eine .exe brauchst, kannst Du Dir das sicher ersparen.
Ohne das veraltete VB6 zu kaufen wirst Du den Code nicht zu einer .exe kompilieren können.

Deine einzige Chance zu einer .exe zu kommen ohne VB zu kaufen ist VB 2008 Express, das es kostenlos bei Microsoft gibt. In .NET ist aber alles anders, da geht das nicht so leicht. :smile:

Gruß Rainer

Sub tt()
Dim appIE
On Error Resume Next
Set appIE = GetObject(, „InternetExplorer.Application“)
If Err.Number 0 Then Set appIE = :CreateObject(„InternetExplorer.Application“)
On Error GoTo 0
With appIE
.Visible = True
.navigate „Pfad/Datei“

gibt es hier nur die Möglichkeit den kompletten Pfad zu einer einzelnen Datei anzugeben? Ich müsste ja auf die zuvor gefundnen Dateien verweisen…?

End With
End Sub

Sub print_htm()
Dim IeApp As Object
Set IeApp = CreateObject(„InternetExplorer.Application“)

strdateien(i) = .FoundFiles(i)
strzugehordner(i) = .FoundFiles(i)
Do
strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) -
InStr(strdateien(i), „“)))
Loop While InStr(strdateien(i), „“) > 0
IeApp.Visible = True
IeApp.navigate2 strzugehordner(i), 1

Huch - gerade erst gesehen |:

Is’ aber auch bissi unübersichtlich… Ja jedenfalls danke - werde das gleich testen, sieht schonmal gut aus :smile:

Lenti

gibt es hier nur die Möglichkeit den kompletten Pfad zu einer
einzelnen Datei anzugeben? Ich müsste ja auf die zuvor
gefundnen Dateien verweisen…?

schon erledigt, brett vorm kopf ist weg :smile:

Hallo,

.navigate „Pfad/Datei“

gibt es hier nur die Möglichkeit den kompletten Pfad zu einer
einzelnen Datei anzugeben? Ich müsste ja auf die zuvor
gefundnen Dateien verweisen…?

kein Problem.

Dim Pfd As String '

Gruß Rainer

Hallo,

wieviel soll von dem angezeigten Dokument gedruckt werden?

Wenn das ganze Dokument gedruckt werden soll, geht es nicht
ohne den Code weiter unten.

Wenn der sichtbare Teil genügt, kann man ja einen Screnshot
schießen …

Nein, reicht leider nicht.

Aber was willst Du mit Quickbasic? Haben die
prozedurorientierten Programmiersprachen nicht mit VB4
angefangen? Aber selbst VB4 war noch eine Interpretersprache,
kompiliert wurde erst ab VB5.

Hatte ich schon erwähnt, dass ich kein Profi bin? Alles, was ich bisher gemacht habe, habe ich mir kleckerweise selbst beigebracht. Das ist wie Klavierspielen ohne Noten :smile:

Ich habe ganz einfach im net nach „bas 2 exe“ gesucht und qb gefunden. probiert habe ich es noch nicht. muss auch nicht zwangsweise, wäre nur die schnellste lösung für mich gewesen.

Gruß Rainer

Dank nochmal.

Bin jetzt hier angelangt:

Sub print_htm ()

With Application.FileSearch
.NewSearch
.FileName = „*.htm“
.LookIn = „…“
.SearchSubFolders = True
If .Execute() > 0 Then
ReDim strdateien(.FoundFiles.Count)
ReDim strzugehordner(.FoundFiles.Count)

For i = 1 To .FoundFiles.Count

strdateien(i) = .FoundFiles(i)
strzugehordner(i) = .FoundFiles(i)
Do
strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) - InStr(strdateien(i), „“)))
Loop While InStr(strdateien(i), „“) > 0

Dim appIE
On Error Resume Next
Set appIE = GetObject(, „InternetExplorer.Application“)

If Err.Number 0 Then Set appIE = CreateObject(„InternetExplorer.Application“)
On Error GoTo 0
With appIE
.Visible = False
.navigate2 strzugehordner(i), 1

End With

Next i
End If
End With
End Sub

Klappt soweit prima - muss nur noch das Drucken auf die Reihe bekommen und versuche gerade mehr rauszubekommen und werde hier mal stöbern:

http://msdn.microsoft.com/en-us/library/b0wes9a3.aspx