Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

.xlsx-file per VBScript automatisch drucken

Frage Entwicklung VB for Applications

Mitglied: nv.it91

nv.it91 (Level 1) - Jetzt verbinden

16.07.2014 um 09:40 Uhr, 1876 Aufrufe, 21 Kommentare

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.

Mit freundlichen Grüßen
Niklas
Mitglied: colinardo
16.07.2014, aktualisiert um 10:04 Uhr
Hallo Niklas, Willkommen auf Administrator.de!
zu 1) dazu musst du die Dateien in der Schleife nach deren Dateierweiterung ausfiltern:
01.
If LCase(fso.GetExtensionName(file.Path)) = "xlsx" Then 
02.
.... 
03.
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:
01.
appXLS.Quit 
02.
set appXLS = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: nv.it91
16.07.2014 um 10:10 Uhr
Danke schonmal für deine Antwort
Kannst du mir vllt zeigen wie das in meinem Skript dann auszusehen hat... steh gerade etwas auf dem Schlauch und bekomme nur Fehler
Bitte warten ..
Mitglied: colinardo
LÖSUNG 16.07.2014, aktualisiert 18.07.2014
01.
Dim predate, Dateiname, fso, file, folder, MyPath, appXLS, wbkXLS, MeineDatei 
02.
MyPath = "\\server\XXX\XXX\XXX\Schichtplaene 2014" 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
Set folder = fso.GetFolder(MyPath) 
06.
 
07.
for each file in folder.Files 
08.
	If LCase(fso.GetExtensionName(file.Path)) = "xlsx" Then  
09.
		filedate = file.datelastmodified 
10.
		if filedate > predate then 
11.
			Dateiname=file.path 
12.
			predate=filedate 
13.
		end If 
14.
	End If 
15.
next 
16.
 
17.
if fso.FileExists(Dateiname) then 
18.
  Set appXLS = CreateObject("Excel.Application") 
19.
  appXLS.DisplayAlerts = False 
20.
  Set wbkXLS = appXLS.Workbooks.Open(Dateiname,,True,,,,,,,,True) 
21.
 
22.
  wbkXLS.sheets("Tabelle1").PrintOut 
23.
  wbkXLS.Close 
24.
  appXLS.DisplayAlerts = True 
25.
  appXLS.Quit 
26.
 
27.
  Set MeineDatei = fso.OpenTextFile("\\server\XXX\XXX\XXX\Log\SchichtplanLog.txt", 8) 
28.
  MeineDatei.WriteLine "Der Schichtplan wurde gedruckt am: " & Date() 
29.
  MeineDatei.WriteLine 
30.
  MeineDatei.Close 
31.
end if 
32.
 
33.
Set wbkXLS = Nothing 
34.
Set appXLS = Nothing 
35.
Set fso = Nothing 
36.
Set MeineDatei = Nothing
Grüße Uwe
p.s. Codetags sehen hier so aus <code> Quellcode </code>.
Bitte warten ..
Mitglied: nv.it91
16.07.2014 um 10:34 Uhr
Sehr cool das funktioniert super 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
Bitte warten ..
Mitglied: colinardo
16.07.2014, aktualisiert um 11:08 Uhr
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.
Bitte warten ..
Mitglied: nv.it91
16.07.2014 um 11:08 Uhr
Zeile 5
Zeichen 1

Wenn ich im Pfad das "ä" durch "ae" ersetze funktioniert es.
Bitte warten ..
Mitglied: colinardo
16.07.2014, aktualisiert um 11:14 Uhr
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 !
Bitte warten ..
Mitglied: nv.it91
16.07.2014 um 11:29 Uhr
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.
Bitte warten ..
Mitglied: colinardo
16.07.2014, aktualisiert um 11:32 Uhr
Zitat von nv.it91:
auswählen, ASCII fehlt.
nein, ich meinte damit auf keinen Fall in ASCII speichern !
Bitte warten ..
Mitglied: nv.it91
16.07.2014 um 11:35 Uhr
Ist als UTF-8 gespeichert, gleiche Fehlermeldung
Bitte warten ..
Mitglied: colinardo
16.07.2014, aktualisiert um 11:41 Uhr
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
Bitte warten ..
Mitglied: nv.it91
16.07.2014 um 11:46 Uhr
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
Bitte warten ..
Mitglied: nv.it91
18.07.2014 um 07:51 Uhr
Moin nochmal,

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

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 ;)

Mit freundlichen Grüßen
Niklas
Bitte warten ..
Mitglied: colinardo
18.07.2014 um 08:15 Uhr
Habe Zeile 20 mal entsprechend abgeändert, kann es aber gerade nicht testen.

Grüße Uwe
Bitte warten ..
Mitglied: nv.it91
18.07.2014 um 08:28 Uhr
Danke für die fixe Antwort,
mal wieder eine Fehlermeldung mit der ich nicht wirklich was anfangen kann da alle offenen Klammern die dazugehörigen schließenden Klammern haben.

Zeile: 20
Zeichen: 46
Fehler: ')' erwartet
Bitte warten ..
Mitglied: colinardo
18.07.2014, aktualisiert um 08:47 Uhr
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 ...
Bitte warten ..
Mitglied: nv.it91
18.07.2014 um 09:01 Uhr
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
Bitte warten ..
Mitglied: colinardo
18.07.2014, aktualisiert um 09:22 Uhr
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.
Bitte warten ..
Mitglied: nv.it91
18.07.2014 um 09:30 Uhr
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
Bitte warten ..
Mitglied: colinardo
18.07.2014, aktualisiert um 09:34 Uhr
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.
Mehr kann ich dazu nicht sagen, sorry

Viel Erfolg.
Bitte warten ..
Mitglied: nv.it91
18.07.2014 um 09:35 Uhr
Okay, krieg ich schon noch hin ;)
vielen lieben Dank für die Hilfe

lg
Niklas
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Windows Server
gelöst Active Directory File Extension - Associated Program (11)

Frage von adm2015 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...