nv.it91
Goto Top

.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

Content-Key: 243808

Url: https://administrator.de/contentid/243808

Printed on: April 19, 2024 at 02:04 o'clock

Member: colinardo
colinardo Jul 16, 2014 updated at 08:04:48 (UTC)
Goto Top
Hallo Niklas, Willkommen auf Administrator.de!
zu 1) dazu musst du die Dateien in der Schleife nach deren Dateierweiterung ausfiltern:
If LCase(fso.GetExtensionName(file.Path)) = "xlsx" Then  
....
End if
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:
appXLS.Quit
set appXLS = Nothing
Grüße Uwe
Member: nv.it91
nv.it91 Jul 16, 2014 at 08:10:07 (UTC)
Goto Top
Danke schonmal für deine Antwort face-smile
Kannst du mir vllt zeigen wie das in meinem Skript dann auszusehen hat... steh gerade etwas auf dem Schlauch und bekomme nur Fehler
Member: colinardo
Solution colinardo Jul 16, 2014, updated at Jul 18, 2014 at 08:30:27 (UTC)
Goto Top
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
Grüße Uwe
p.s. Codetags sehen hier so aus <code> Quellcode </code>.
Member: nv.it91
nv.it91 Jul 16, 2014 at 08:34:00 (UTC)
Goto Top
Sehr cool das funktioniert super face-smile besten dank schonmal!

Jetzt muss ich nur noch gucken dass das mit den Umlauten funktioniert, bzw wieso es nicht funktioniert.

zu 2.) der Fehler: Der Pfad wurde nicht gefunden. Code: 800A004C. Quelle: Laufzeitfehler

p.s. danke für die info mit den Codetags ^^ ist ja bei jedem Forum irgendwie anders :P
Member: colinardo
colinardo Jul 16, 2014 updated at 09:08:56 (UTC)
Goto Top
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 ?
Existiert der Pfad zum Logfile überhaupt ? Wenn nicht musst du den Ordner erst mit fso.CreateFolder erstellen.
Member: nv.it91
nv.it91 Jul 16, 2014 at 09:08:29 (UTC)
Goto Top
Zeile 5
Zeichen 1

Wenn ich im Pfad das "ä" durch "ae" ersetze funktioniert es.
Member: colinardo
colinardo Jul 16, 2014 updated at 09:14:27 (UTC)
Goto Top
Zitat von @nv.it91:
Wenn ich im Pfad das "ä" durch "ae" ersetze funktioniert es.
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 !
Member: nv.it91
nv.it91 Jul 16, 2014 at 09:29:43 (UTC)
Goto Top
komischerweise kann ich bei Notepad++ als Kodierung nur ANSI, UTF-8 ohne BOM, UTF-8, UCS2 Big Endian und UCS2 Little Endian auswählen, ASCII fehlt.
Member: colinardo
colinardo Jul 16, 2014 updated at 09:32:16 (UTC)
Goto Top
Zitat von @nv.it91:
auswählen, ASCII fehlt.
nein, ich meinte damit auf keinen Fall in ASCII speichern ! face-wink
Member: nv.it91
nv.it91 Jul 16, 2014 at 09:35:51 (UTC)
Goto Top
Ist als UTF-8 gespeichert, gleiche Fehlermeldung
Member: colinardo
colinardo Jul 16, 2014 updated at 09:41:08 (UTC)
Goto Top
Zitat von @nv.it91:
Ist als UTF-8 gespeichert, gleiche Fehlermeldung
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
Member: nv.it91
nv.it91 Jul 16, 2014 at 09:46:41 (UTC)
Goto Top
Ok ich teste mal rum,

vielen dank schonma für die Top Hilfe ;)

Wenn ich mal wieder ein Problem hab meld ich mich

lg
Niklas
Member: nv.it91
nv.it91 Jul 18, 2014 at 05:51:50 (UTC)
Goto Top
Moin nochmal,

Das mit den Umlauten funktioniert jetzt, lag an der Zeichenkodierung face-confused ^^

Jetzt würd ich das Skript gern noch um eine Sache erweitern, und zwar ist es möglich das mir das Skript die Tabelle auch druckt obwohl jemand anderes die Datei gerade offen hat?
Weil im Moment bekomm ich da noch die Fehlermeldung: '\\server\XXX\XXX\XXX.xlsx' wird momentan von einer anderen Person bearbeitet. Versuchen Sie es später noch einmal.

Wäre super wenn man das irgendwie umgehen könnte ;)

MfG
Niklas
Member: colinardo
colinardo Jul 18, 2014 at 06:15:15 (UTC)
Goto Top
Habe Zeile 20 mal entsprechend abgeändert, kann es aber gerade nicht testen.

Grüße Uwe
Member: nv.it91
nv.it91 Jul 18, 2014 at 06:28:02 (UTC)
Goto Top
Danke für die fixe Antwort,
mal wieder eine Fehlermeldung mit der ich nicht wirklich was anfangen kann face-confused da alle offenen Klammern die dazugehörigen schließenden Klammern haben.

Zeile: 20
Zeichen: 46
Fehler: ')' erwartet
Member: colinardo
colinardo Jul 18, 2014 updated at 06:47:31 (UTC)
Goto Top
ach, sorry wir sind ja hier in VBS und nicht in VBA face-wink, korrigiert. Hoffentlich habe ich die Kommas richtig gezählt face-smile
siehe dazu auch folgende Doku:
http://msdn.microsoft.com/de-de/library/office/ff194819(v=office.15).as ...
Member: nv.it91
nv.it91 Jul 18, 2014 at 07:01:29 (UTC)
Goto Top
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.

Danke für die Doku, Dokus sind immer gut face-smile
Member: colinardo
colinardo Jul 18, 2014 updated at 07:22:49 (UTC)
Goto Top
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.

p.s. klappt hier einwandfrei wenn jemand das Sheet im Schreibmodus übers Netz geöffnet hat.
Member: nv.it91
nv.it91 Jul 18, 2014 at 07:30:58 (UTC)
Goto Top
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 face-confused
Member: colinardo
colinardo Jul 18, 2014 updated at 07:34:32 (UTC)
Goto Top
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 face-confused
wie gesagt läuft hier einwandfrei, ist sicher wieder irgendwas bei dir mit deiner Zeichenkodierung.
Mehr kann ich dazu nicht sagen, sorry

Viel Erfolg.
Member: nv.it91
nv.it91 Jul 18, 2014 at 07:35:10 (UTC)
Goto Top
Okay, krieg ich schon noch hin ;)
vielen lieben Dank für die Hilfe

lg
Niklas