Jump to content

automatisches drucken von MS-Excel Tabellen mit VBScript


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo,

 

folgende Frage: Wir haben bei uns im Unternehmen wöchentlich eine Excelliste auszudrucken, wobei jede Woche eine neue Datei erstellt wird. Der Name der Datei ist

 

immer "Schichtplan 2014 01.xlsx", wobei der hintere Teil also die "01" dann durch "02" usw. ersetzt wird. Diese soll nach Möglichkeit zeitgesteuert jeden Montag nach

 

Computerstart gedruckt werden.

 

Durch wiederholtes Googlen versuch Ich es nun mit einem VBScript zu realisieren, da ich aber ein Anfänger im Bereich scripting bin funktioniert mein Script noch nicht

 

so ganz. Ich bekomm es hin das eine Datei gedruckt wird aber noch nicht das sich das Script immer die aktuellste .xlsx-Datei raussucht.

 

Hier mal mein erster Versuch:

 

' Excel (versteckt) öffnen
    Set appXLS = CreateObject("Excel.Application")

' Workbook (versteckt) und schreibgeschützt öffnen
    Set wbkXLS = appXLS.Workbooks.Open("C:\Users\Niklas Vitt\Documents\Schichtplaene\Schichtplan 2014 25.xlsx", , True)
    Aktuell = ""
    Pre = "Schichtplan 2014 "
    For Each Blatt in wbkXLS.worksheets
    BN = Blatt.Name
    If Left (BN, Len(Pre)) = Pre Then
        Woche = Split(BN) (1)
        If Woche > Aktuell Then Aktuell = Woche
    End If
    Next

    MsgBox "Neuestes Blatt: " & Pre & Aktuell
    
' Tabelle1 ausdrucken
    wbkXLS.sheets("Tabelle1").PrintOut
' Workbook schließen
    wbkXLS.Close



    Set wbkXLS = Nothing
    appXLS.Quit
    Set appXLS = Nothing

 

freue mich über jede Hilfe

 

MfG

 

Niklas_V

 

 

Geschrieben

Du meinst doch den Dateiname, nicht das Tabellenblatt darin, korrekt?

Wenn diese Wochennummern den Kalenderwochen entsprechen, könntest Du z.B. die Datepart-Funktion nutzen:


Woche = Datepart("ww",Date,2)
Dateiname = "Wochenplan 2014 " & Woche & ".xlsx"
Geschrieben
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\MeinOrdner\")

predate=date()
for each file in folder.Files
  filedate = file.datelastmodified
  if filedate > predate then Dateiname=file.path
  predate=filedate
next


so in der Art könntest Du zumindest die neueste Datei raussuchen. Sollte es da noch mehr ausser "Wochenplan" geben, kannst ja innerhalb der For-Each-Schleife noch filtern...

Geschrieben
MyPath= "J:\DIV\XLS"

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)

maybe like this? ... dannach dann halt noch den "Printout-Befehl etc...

Geschrieben

Hi nochmal,

 

Ein letzter Feinschliff fehlt mir noch... und zwar legt mein Skript jetzt fleißig ein Log an aber überschreibt dieses immer weil es ja den gleichen Namen erhält.

Wie schaff ich es das immer das Datum angehangen wird? Also das quasi immer wieder eine neue Log entsteht mit dem Erstellungsdatum.

Soweit bin ich:

Dim fso, MeineDatei
Set fso = CreateObject("Scripting.FileSystemObject")
Set MeineDatei = fso.CreateTextFile("C:\Users\XXX XXX\XXX\LogFiles\TestLog.txt", True, True)
MeineDatei.WriteLine("Der Schichtplan wurde gedruckt")
MeineDatei.Close

 

MfG

 

Niklas

Geschrieben (bearbeitet)

Statt CreateTextFile eben OpenTextFile und das mit der Option "ForAppending" (8).

fso.OpenTextFile("Log.txt",8)

 

und bei dem writeline einfach noch'n Datum mit ausgeben:

MeineDatei.writeline Dateiname & " wurde gedruckt am " & Date()

bearbeitet von Cybquest
Geschrieben

Hmm... liegt das an mir oder warum schreibt der sowas hier in die Log: "敄⁲捓楨档灴慬畷摲⁥敧牤捵瑫愠㉭⸶㘰㈮㄰ഴ" ?  :confused:

so sieht der Code aus .. eig nicht groß verändert:

Dim fso, MeineDatei
Set fso = CreateObject("Scripting.FileSystemObject")
Set MeineDatei = fso.OpenTextFile("C:\Users\XXX XXX\XXX\LogFiles\SchichtplanLog.log", 8, True)
MeineDatei.WriteLine "Der Schichtplan wurde gedruckt am" & Date()
MeineDatei.Close


 

Geschrieben

Wozu das "True" als weiteren Parameter? Bei OpenTextFile wird als 3. Parameter dort das Code-Format angegeben. Lass das einfach weg, damit Systemdefault genommen wird.

Ansonsten: Schau Dir auf MSDN.microsoft.com einfach mal die OpenTextFile-Methode an!

Geschrieben

So jetzt funktioniert alles so wie es soll! Thema kann erfolgreich geschlossen werden.

 

Vielen lieben dank für die schnelle un gute Hilfe :)

 

Falls ich mal wieder irgendein Problem haben sollte werde ich mich wieder melden.

 

MfG

 

Niklas

  • 3 Wochen später...
Geschrieben

Moin nochma ;)

 

Das Skript funktioniert soweit ganz gut,

jetzt hab ich noch ein Problem, und zwar kann ich auch nach der aktuellsten .xls-datei filtern das er mir nur die ausdruckt? Weil das Skript gibt einen Fehler aus wenn zum Beispiel eine .txt-Datei im Ordner enthalten ist die neuer ist als das zu Druckende xls-file.

Also muss ich das Skript so anpassen, dass auch wenn eine andere Datei im Ordner liegt die neuer ist, das Skript trotzdem die neueste .xls-Datei druckt.

Ich bin für jeden Lösungsvorschlag dankbar :)

 

MfG

Niklas

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...