.xlsx-file per VBScript automatisch drucken
Hallo,
Ich bin ein IT-Lehrling im ersten Lehrjahr und muss mich zur Zeit mit VBScript befassen.
Wir haben im Unternehmen jede Woche einen Schichtplan zu drucken, das hab ich soweit auch hinbekommen per Skript:
[code]
MyPath= "\\server\XXX\XXX\XXX\Schichtplaene 2014"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(MyPath)
for each file in folder.Files
filedate = file.datelastmodified
if filedate > predate then
Dateiname=file.path
predate=filedate
end if
next
Set appXLS = CreateObject("Excel.Application")
Set wbkXLS = appXLS.Workbooks.Open(Dateiname,,True)
wbkXLS.sheets("Tabelle1").PrintOut
wbkXLS.Close
Dim fso, MeineDatei
Set fso = CreateObject("Scripting.FileSystemObject")
Set MeineDatei = fso.OpenTextFile("\\server\XXX\XXX\XXX\Log\SchichtplanLog.txt", 8)
MeineDatei.WriteLine "Der Schichtplan wurde gedruckt am: " & Date()
MeineDatei.WriteLine
MeineDatei.Close
[/code]
Das Problem ist, dass das Skript jetzt noch 2 Schönheitsfehler hat.
1. Es ist so das sich das Skript immer die neueste Datei im Ordner sucht und diese druckt, das funktioniert aber nur wenn die neueste Datei auch eine .xlsx-Datei ist. Jetzt möchte ich das auch wenn eine andere Datei (bspw. eine .txt-Datei) neuer ist, sich das Skript trotzdem nur die neueste .xlsx-Datei raussucht und diese druckt.
2. Ein weiteres Problem sind die Umlaute, wie schaffe ich es das wenn im Pfad ein "ä" auftaucht das das Skript den Pfad auch verfolgen kann, bis jetzt musste ich das "ä" durch ein "ae" ersetzen, und da dachte ich mir das das bestimmt auch schöner geht.
MfG
Niklas
Ich bin ein IT-Lehrling im ersten Lehrjahr und muss mich zur Zeit mit VBScript befassen.
Wir haben im Unternehmen jede Woche einen Schichtplan zu drucken, das hab ich soweit auch hinbekommen per Skript:
[code]
MyPath= "\\server\XXX\XXX\XXX\Schichtplaene 2014"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(MyPath)
for each file in folder.Files
filedate = file.datelastmodified
if filedate > predate then
Dateiname=file.path
predate=filedate
end if
next
Set appXLS = CreateObject("Excel.Application")
Set wbkXLS = appXLS.Workbooks.Open(Dateiname,,True)
wbkXLS.sheets("Tabelle1").PrintOut
wbkXLS.Close
Dim fso, MeineDatei
Set fso = CreateObject("Scripting.FileSystemObject")
Set MeineDatei = fso.OpenTextFile("\\server\XXX\XXX\XXX\Log\SchichtplanLog.txt", 8)
MeineDatei.WriteLine "Der Schichtplan wurde gedruckt am: " & Date()
MeineDatei.WriteLine
MeineDatei.Close
[/code]
Das Problem ist, dass das Skript jetzt noch 2 Schönheitsfehler hat.
1. Es ist so das sich das Skript immer die neueste Datei im Ordner sucht und diese druckt, das funktioniert aber nur wenn die neueste Datei auch eine .xlsx-Datei ist. Jetzt möchte ich das auch wenn eine andere Datei (bspw. eine .txt-Datei) neuer ist, sich das Skript trotzdem nur die neueste .xlsx-Datei raussucht und diese druckt.
2. Ein weiteres Problem sind die Umlaute, wie schaffe ich es das wenn im Pfad ein "ä" auftaucht das das Skript den Pfad auch verfolgen kann, bis jetzt musste ich das "ä" durch ein "ae" ersetzen, und da dachte ich mir das das bestimmt auch schöner geht.
MfG
Niklas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 243808
Url: https://administrator.de/forum/xlsx-file-per-vbscript-automatisch-drucken-243808.html
Ausgedruckt am: 25.04.2025 um 05:04 Uhr
21 Kommentare
Neuester Kommentar
Hallo Niklas, Willkommen auf Administrator.de!
zu 1) dazu musst du die Dateien in der Schleife nach deren Dateierweiterung ausfiltern:
zu 2)
Kann ich hier nicht nachvollziehen, geht hier auch mit Umlauten einwandfrei. Mich würde hier die Fehlermeldung interessieren die du in diesem Fall erhältst?
Zur Info: Du solltest nach dem Drucken auch das Excel-Objekt schließen bzw. wieder freigeben, sonst läuft Excel im Hintergrund weiter:
Grüße Uwe
zu 1) dazu musst du die Dateien in der Schleife nach deren Dateierweiterung ausfiltern:
If LCase(fso.GetExtensionName(file.Path)) = "xlsx" Then
....
End if
Kann ich hier nicht nachvollziehen, geht hier auch mit Umlauten einwandfrei. Mich würde hier die Fehlermeldung interessieren die du in diesem Fall erhältst?
Zur Info: Du solltest nach dem Drucken auch das Excel-Objekt schließen bzw. wieder freigeben, sonst läuft Excel im Hintergrund weiter:
appXLS.Quit
set appXLS = Nothing
Dim predate, Dateiname, fso, file, folder, MyPath, appXLS, wbkXLS, MeineDatei
MyPath = "\\server\XXX\XXX\XXX\Schichtplaene 2014"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(MyPath)
for each file in folder.Files
If LCase(fso.GetExtensionName(file.Path)) = "xlsx" Then
filedate = file.datelastmodified
if filedate > predate then
Dateiname=file.path
predate=filedate
end If
End If
next
if fso.FileExists(Dateiname) then
Set appXLS = CreateObject("Excel.Application")
appXLS.DisplayAlerts = False
Set wbkXLS = appXLS.Workbooks.Open(Dateiname,,True,,,,,,,,True)
wbkXLS.sheets("Tabelle1").PrintOut
wbkXLS.Close
appXLS.DisplayAlerts = True
appXLS.Quit
Set MeineDatei = fso.OpenTextFile("\\server\XXX\XXX\XXX\Log\SchichtplanLog.txt", 8)
MeineDatei.WriteLine "Der Schichtplan wurde gedruckt am: " & Date()
MeineDatei.WriteLine
MeineDatei.Close
end if
Set wbkXLS = Nothing
Set appXLS = Nothing
Set fso = Nothing
Set MeineDatei = Nothing
p.s. Codetags sehen hier so aus
<code> Quellcode </code>
.Zitat von @nv.it91:
zu 2.) der Fehler: Der Pfad wurde nicht gefunden. Code: 800A004C. Quelle: Laufzeitfehler
in welche Code-Zeile wird im Fehler verwiesen? Pfad eventuell zu lang ?zu 2.) der Fehler: Der Pfad wurde nicht gefunden. Code: 800A004C. Quelle: Laufzeitfehler
Existiert der Pfad zum Logfile überhaupt ? Wenn nicht musst du den Ordner erst mit fso.CreateFolder erstellen.
kann ich hier auch auf einem Netzlaufwerk nicht nachstellen. Vermutlich hast du dein Script nicht in der richtigen Zeichenkodierung (ASCII anstatt UTF-8 oder ANSI) gespeichert !
nein, ich meinte damit auf keinen Fall in ASCII speichern ! 
dann stimmt mit dem System was nicht, prüfe es mal auf einem anderen Rechner.
Hatte ich hier noch nie solche Probleme .. und ich mache viel mit VBS/VBA
Hatte ich hier noch nie solche Probleme .. und ich mache viel mit VBS/VBA
ach, sorry wir sind ja hier in VBS und nicht in VBA
, korrigiert. Hoffentlich habe ich die Kommas richtig gezählt 
siehe dazu auch folgende Doku:
http://msdn.microsoft.com/de-de/library/office/ff194819(v=office.15).as ...
siehe dazu auch folgende Doku:
http://msdn.microsoft.com/de-de/library/office/ff194819(v=office.15).as ...
Zitat von @nv.it91:
wieder Zeile 20, Zeichen: 3
Excel kann nicht auf die datei zugreifen, Dies kann mehrere Gründe haben:
- Der Name des Dokuments oder der Pfad ist nicht vorhanden. (ausgeschlossen)
- Das Dokument wird von einem anderen Programm verwendet. (Ich hab die Datei ja die ganze zeit offen in Excel)
- Der Name der Arbeitsmappe, die gespeichert werden soll, ist identisch zu dem Namen eines anderen Dokuments, welches
schreibgeschützt ist.
Dann hast du im Hintergrund noch nicht sichtbare Excel-Prozesse durch diese Fehler aktiv, dann kommt dieses Verhalten zustande ! Die musst du zuerst im Taskmanager killen.wieder Zeile 20, Zeichen: 3
Excel kann nicht auf die datei zugreifen, Dies kann mehrere Gründe haben:
- Der Name des Dokuments oder der Pfad ist nicht vorhanden. (ausgeschlossen)
- Das Dokument wird von einem anderen Programm verwendet. (Ich hab die Datei ja die ganze zeit offen in Excel)
- Der Name der Arbeitsmappe, die gespeichert werden soll, ist identisch zu dem Namen eines anderen Dokuments, welches
schreibgeschützt ist.
p.s. klappt hier einwandfrei wenn jemand das Sheet im Schreibmodus übers Netz geöffnet hat.
Zitat von @nv.it91:
Also im Hintergrund läuft nichts von Excel, liegt glaube ich daran dass ich die Liste offen hab die gedruckt werden soll.
Weil wenn ich diese schließe kommt keine Fehlermeldung und die Datei wird gedruckt.
Aber das wäre ja genau der Fall den ich verhindern möchte.
Sorry das ich dich damit so aufhalte
wie gesagt läuft hier einwandfrei, ist sicher wieder irgendwas bei dir mit deiner Zeichenkodierung.Also im Hintergrund läuft nichts von Excel, liegt glaube ich daran dass ich die Liste offen hab die gedruckt werden soll.
Weil wenn ich diese schließe kommt keine Fehlermeldung und die Datei wird gedruckt.
Aber das wäre ja genau der Fall den ich verhindern möchte.
Sorry das ich dich damit so aufhalte
Mehr kann ich dazu nicht sagen, sorry
Viel Erfolg.