5.7k Aufrufe
Gefragt in E-Mail Outlook von wasserm Einsteiger_in (25 Punkte)
In einem Verzeichnis befinden sich mehrere Exceldateien.

Nun muss monatlich immer nur die erste Seite ausgedruckt werden.

Wie kann man hier vorgehen.

Habe bereits ein Makro und eine Batchdatei erstellt, doch leider öffnen sich die Dateien und ich muss das Makro ausführen, anschließend Excel beenden, es wird die nächste Datei geöffnet, wo habe ich den Fehler?

Makro:
ub Drucken_1_1()
Dim Kopien As Variant
If MsgBox("Drucken?", vbYesNo, "Drucken") = vbYes Then
Do
Kopien = InputBox("Anzahl Kopien", "Drucken", 1)
If StrPtr(Kopien) = 0 Then Exit Sub
If IsNumeric(Kopien) Then Exit Do
MsgBox "Bitte eine Zahl eingeben!", vbExclamation, "Hinweis"
Loop
ActiveSheet.PrintOut From:=1, To:=1, Copies:=CLng(Kopien)
End If
End Sub

Batchdatei:

for /f %%a in ('dir /b *.xls') do (start /wait excel.exe %%a /mPERSONL.XLS!Drucken_1_1)

Schon im Voraus vielen Dank für die Hilfe

8 Antworten

0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo Wassermann,

warum so kompliziert?

Lege einfach einen Druckbereich fest, der kann auch das gesamte erste Arbeitsblatt umfassen, und speichere die Datei ab. Solange du jetzt beim Drucken nicht ausdrücklich angibst, dass der definierte Druckbereich ignoriert werden soll, wird künftig nur noch das erste Arbeitsblatt ausgedruckt.

Gruß
Kalle
0 Punkte
Beantwortet von wasserm Einsteiger_in (25 Punkte)
Hallo KJG17,

wenn es sich nur um eine Datei handeln würde, wäre das Problem selbstverständlich so gelöst.

Doch es handelt sich um mehrere Dateien, die mein Kollege per e-mail erhält, nun benötigt er jedoch aus den vielen Dateien immer nur die erste Seite.
0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo,

da du das Ergebnis dann als Mail verschicken willst verstehe ich jetzt nicht so ganz, weshalb du die Sachen erst noch ausdrucken willst. Oder handelt es sich um einen PDF-Druck, also die Erzeugung von PDF-Dateien.

Dazu hab ich mal kurz einen Test gemacht, ohne Makro oder Batch, da ich davon eigentlich nicht allzuviel verstehe.

Also mal FreePDF XP als Standard-Drucker eingestellt. Dann 10 Excel-Dateien mit eingestelltem Druckbereichen im ersten Arbeitsblatt im Explorer markiert und über das Kontexmenü 'Drucken' aufgerufen. Excel wird gestartet und alle 10 Dateien geöffnen. Im ebenfalls automatisch aufgerufenen FreePDF XP wähle ich 'Multidoc' aus, was ich natürlich 10 mal machen muss. Nach der letzten Datei schließt sich Excel wieder, in meinem 'Drucker' wähle ich 'Ablegen' aus, gebe der Sache einem Namen und habe anschließend ein einziges PDF-Dokument mit 40 Seiten, welches nur den Inhalt der jeweils definierten Druckbereich enthält.

Die ganze Sache hat keine 3 Minuten gedauert, allerdings waren die Tabellen auch nicht allzu groß. Ich hätte auch vor der Speicherung die Seiten noch mal umsortieren, noch ein Anschreiben einfügen, oder auch statt 'Ablegen' gleich 'E-Mail' auswählen können.

Wenn es dir also nicht um die Erstellung von bearbbeitbaren Kopien der jeweils ersten Arbeitsblätter geht und sich auch niemand mehr findet, der dir in der Script-Sache weiterhelfen kann, ist dieser Weg für dich eventuell zumindest eine akzeptable 'Not'-Lösung.

Gruß
Kalle
0 Punkte
Beantwortet von
Hi,

Ich würde gleich die ganze Aufgabe von VBA erledigen lassen, ohne zuvor den Umweg über eine BatchDatei zu nehmen. Dazu würde ich eine neue Mappe anlegen und in dieser in eine neues Modul folgendes Makro packen.

Sub Auto_open()
Dim objFS As Object, objFolder As Object, objDatei As Object, objObj As Object
Dim strQuellVerz As String

strQuellVerz = "C:\Test2\" 'hier das Verzeichnis angeben, welches die zu druckenden Mappen enthält

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.Getfolder(strQuellVerz)
Set objDatei = objFolder.Files

With objFolder
If .Files.Count = 0 Then
MsgBox ("No files found")
Else
For Each objObj In objDatei
If InStr(1, objObj.Type, "Excel", vbTextCompare) Then
Workbooks.Open Filename:=objObj
Dim Kopien As Variant
If MsgBox("Drucken?", vbYesNo, "Drucken") = vbYes Then
Do
Kopien = InputBox("Anzahl Kopien", "Drucken", 1)
If StrPtr(Kopien) = 0 Then ActiveWorkbook.Close savechanges:=False: Exit Sub
If IsNumeric(Kopien) Then Exit Do
MsgBox "Bitte eine Zahl eingeben!", vbExclamation, "Hinweis"
Loop
ActiveSheet.PrintOut From:=1, To:=1, Copies:=CLng(Kopien)
End If
ActiveWorkbook.Close savechanges:=False
End If
Next
End If
End With

Set objFS = Nothing
Set objFolder = Nothing
Set objDatei = Nothing

End Sub


Der Name "Auto_open" sollte dafür sorgen, dass das Makro ohne zutun des Users gleich startet. (Man kann es nat. auch ins Open-Ereignis der Mappe ablegen um dies zu erreichen.)
Anschliessend wird das QuellVerzeichnis nach Excel-Dateien durchsucht, wobei Datei für Datei geöffnet wird. Für jede dieser Dateien kommt nun Dein eigangs gepostetes Markro zur Anwendung und die Mappe wird geschlossen. Anschliessend geht es mit der nächsten Mappe im QuellVerzeichnis weiter.

bye
malSchauen
0 Punkte
Beantwortet von wasserm Einsteiger_in (25 Punkte)
Hallo malSchauen,

vielen Dank für den Lösungsvorschlag, war genau das, was ich gesucht habe.

Gruß

Monika
0 Punkte
Beantwortet von wasserm Einsteiger_in (25 Punkte)
Hallo malSchauen,

jetzt habe ich doch noch eine Frage, wie kann man es umgehen, dass bei jedem Excelstart sofort gedruckt wird, möchte dass nur nach Anweisung ausgedruckt wird.

Gruß

Monika
0 Punkte
Beantwortet von
Hi,

Wenn das Makro/Drucken bei JEDEM Excelstart anläuft, dann kann das, so aus der Ferne gesehen, nur eines bedeuten: Du hast es als Sub Auto_open() in ein Modul der Mappe Personal.xls gespeichert. Dort sollte es nun ganz und gar nicht hin. Zumindest nicht mit diesem Namen.

Ich schlug vor, dass Du dieses Makro in ein Modul einer neuen Arbeitsmappe speicherst (z.B. "Drucken.xls"). Diese Datei öffnest Du/Dein Kollege dann nur, um eben diesen Druckjob anzustossen (Wozu zuvor Deine Batch-Datei gedacht war). Und nur wenn diese neue Mappe geöffnet wird, dann startet dieses Makro automatisch.

Wie Du dazu vorgehst, beschreibt der SN-User Coros auf seiner Site Excelbeispiele.de unter Anleitungen Punkt 3.) Anleitung zum VBA Projekt “StandardModul".

btw: Aus dem VBA-Project der Personal.xls solltest Du den Code dieses Makros selbstredend wieder entfernen.

Bye
malSchauen
0 Punkte
Beantwortet von wasserm Einsteiger_in (25 Punkte)
Hallo malSchauen,

ok, vielen Dank für Deine Antwort.

Hallo Kalle,

auf jeden Fall möchte ich Dir auch danke sage, dass Du auf meine Frage reagiert hast.

Es geht um eingehende email bzw. eingehende Exceldateien.

Gruß

Monika
...