Liste von Dateien ausdrucken (verschiedene Drucker ansteuern)
Hallo alle!
Ich habe ein excel-vba-file, welches mir Dateien ausdruckt!
In den Zellen A2 bis Ax befinden sich die Dateinamen samt zugehöriger Pfad
In den Zellen B2 bis Bn befindet sich das Format (A3 oder A4) - je nach dem sollte dann der passende Drucker reagieren.
Folgende Probleme haben sich eingestellt:
1) es druckt mir IMMER auf meinem STANDARDDRUCKER aus!
2) die Dateien werden in chaotischer Reihenfolge gedruckt
ich hab schon viel herumprobiert, irgendwie ist bei mir da der Wurm drinnen!
Hoffentlich könnt Ihr mir helfen!
Danke vorab!
ciao ciao
Markus
PS: bin VBA-Voll-Anfänger, das Programm habe ich nicht ganz alleine erstellt
hier das Hauptprogramm:
Option Explicit
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim format As String
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
Do Until IsEmpty(ws.Cells(zeile, "A"))
format = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" Then
If format = "A4" Then
Application.ActivePrinter = "Minolta PagePro 20 auf \\Nthajek\kb_mpp20"
PDF_Datei_drucken datei:=pdf
End If
If format = "A3" Then
Application.ActivePrinter = "Minolta PagePro 20 (A3) auf \\Nthajek\kb_mpp20"
PDF_Datei_drucken datei:=pdf
End If
Else
ws.Cells(zeile, "C") = "NV"
End If
zeile = zeile + 1
Loop
End Sub
Erklärung: Minolta PagePro 20 auf \\Nthajek\kb_mpp20
Ich habe per Makro einen Druckauftrag aufgezeichnet und dann hat er mir diese Syntax ausgespuckt!!
hier die Druck-Prozedur:
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long _
) As Long
Sub PDF_Datei_drucken(datei As String)
ShellExecute 0&, "print", datei, vbNullString, vbNullString, vbNormalFocus
End Sub
Ich habe ein excel-vba-file, welches mir Dateien ausdruckt!
In den Zellen A2 bis Ax befinden sich die Dateinamen samt zugehöriger Pfad
In den Zellen B2 bis Bn befindet sich das Format (A3 oder A4) - je nach dem sollte dann der passende Drucker reagieren.
Folgende Probleme haben sich eingestellt:
1) es druckt mir IMMER auf meinem STANDARDDRUCKER aus!
2) die Dateien werden in chaotischer Reihenfolge gedruckt
ich hab schon viel herumprobiert, irgendwie ist bei mir da der Wurm drinnen!
Hoffentlich könnt Ihr mir helfen!
Danke vorab!
ciao ciao
Markus
PS: bin VBA-Voll-Anfänger, das Programm habe ich nicht ganz alleine erstellt
hier das Hauptprogramm:
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim format As String
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
Do Until IsEmpty(ws.Cells(zeile, "A"))
format = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" Then
If format = "A4" Then
Application.ActivePrinter = "Minolta PagePro 20 auf \\Nthajek\kb_mpp20"
PDF_Datei_drucken datei:=pdf
End If
If format = "A3" Then
Application.ActivePrinter = "Minolta PagePro 20 (A3) auf \\Nthajek\kb_mpp20"
PDF_Datei_drucken datei:=pdf
End If
Else
ws.Cells(zeile, "C") = "NV"
End If
zeile = zeile + 1
Loop
End Sub
Erklärung: Minolta PagePro 20 auf \\Nthajek\kb_mpp20
Ich habe per Makro einen Druckauftrag aufgezeichnet und dann hat er mir diese Syntax ausgespuckt!!
hier die Druck-Prozedur:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long _
) As Long
Sub PDF_Datei_drucken(datei As String)
ShellExecute 0&, "print", datei, vbNullString, vbNullString, vbNormalFocus
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 50090
Url: https://administrator.de/forum/liste-von-dateien-ausdrucken-verschiedene-drucker-ansteuern-50090.html
Ausgedruckt am: 23.04.2025 um 02:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo Hai-Eck!
Zu Problem 1)
Die Anweisung "Application.ActivePrinter" legt für die "Applikation" Excel einen Drucker fest - Dein Druck erfolgt aber über das Betriebssystem (vereinfacht gesagt simulierst Du einen Klick auf das Explorerkontextmenü "Drucken" einer Datei) - daher die Verwendung des Standarddruckers.
Bevor ich mich mit Problem 2) befasse, noch eine Frage: Warum verwendest Du Excel für diese Aufgabe? Neulich hatten wir etwas Ähnliches für Word-Dateien (Lösungsansatz siehe Word Document durch Batch drucken) - das könnte vielleicht auch für Dich passen ...
Grüße
bastla
Zu Problem 1)
Die Anweisung "Application.ActivePrinter" legt für die "Applikation" Excel einen Drucker fest - Dein Druck erfolgt aber über das Betriebssystem (vereinfacht gesagt simulierst Du einen Klick auf das Explorerkontextmenü "Drucken" einer Datei) - daher die Verwendung des Standarddruckers.
Bevor ich mich mit Problem 2) befasse, noch eine Frage: Warum verwendest Du Excel für diese Aufgabe? Neulich hatten wir etwas Ähnliches für Word-Dateien (Lösungsansatz siehe Word Document durch Batch drucken) - das könnte vielleicht auch für Dich passen ...
Grüße
bastla
Hallo Hai-Eck!
Das "Bahnhofs"-Script
dient dazu, alle Word-Dateien eines Ordners (vorgegeben war: einer Diskette) auszudrucken - für Dich würde das bedeuten, einfach alle Dateien, die mit einem bestimmten Drucker gedruckt werden sollen, in einem Ordner zu sammeln und den ganzen Ordner drucken zu lassen - die einzig erforderliche Anpassung wäre, nicht auf den Dateityp ".doc" zu prüfen.
, aber egal: Dein oben gepostetes Script müsste eigentlich nur den Standarddrucker neu setzen, dann sollte der Ausdruck klappen. Versuch dazu folgendes Unterprogramm:
Im Programmcode wäre dann die Zeile
zu ersetzen durch
(natürlich auch für die A3-Variante). Am Ende (nach Loop) könntest Du mit einer weiteren "SetStandardPrinter"-Anweisung dafür sorgen, dass für andere Anwendungen wieder der richtige Drucker eingestellt wird.
HTH
bastla
Das "Bahnhofs"-Script
Output = in Excel-Form
Leider verstehe ich nicht, was Du damit meinst Sub SetStandardPrinter(strPrinterName As String)
Dim objScriptingNetwork As Object
Set objScriptingNetwork = CreateObject("WScript.Network")
objScriptingNetwork.SetDefaultPrinter strPrinterName
Set objScriptingNetwork = Nothing
End Sub
Application.ActivePrinter = "Minolta PagePro 20 auf \\Nthajek\kb_mpp20"
<b>SetStandardPrinter</b> "Minolta PagePro 20 auf \\Nthajek\kb_mpp20"
HTH
bastla
Hallo Hai-Eck!
Mit "zweite Sache" meinst Du die Reihenfolge? Leider weiß ich darüber noch gar nix (außer, dass diese eher "unkonventionell" zu sein scheint
).
Vielleicht kannst Du ja vor dem Drucken die Dateililste nach dem zu verwendenden Drucker vorsortieren - also alle A4-Drucke zuerst, danach jene für Format A3. Um es reproduzierbar zu machen, könntest Du vor dem Sortieren in einer freien Spalte noch eine laufende Nummer eintragen, um innerhalb der Formate die Reihenfolge beibehalten bzw zur ursprünglichen Reihung zurückkehren zu können (indem Du nach dieser Nummer sortierst).
Das Script arbeitet eigentlich die Liste brav vom ersten bis zum letzten Eintrag durch. Was siehst Du eigentlich in der Druckerwarteschlange?
Grüße
bastla
P.S.:

hat geklappt - yeah!!
My pleasure (hat eh ein wenig gedauert) ...Mit "zweite Sache" meinst Du die Reihenfolge? Leider weiß ich darüber noch gar nix (außer, dass diese eher "unkonventionell" zu sein scheint
Vielleicht kannst Du ja vor dem Drucken die Dateililste nach dem zu verwendenden Drucker vorsortieren - also alle A4-Drucke zuerst, danach jene für Format A3. Um es reproduzierbar zu machen, könntest Du vor dem Sortieren in einer freien Spalte noch eine laufende Nummer eintragen, um innerhalb der Formate die Reihenfolge beibehalten bzw zur ursprünglichen Reihung zurückkehren zu können (indem Du nach dieser Nummer sortierst).
Das Script arbeitet eigentlich die Liste brav vom ersten bis zum letzten Eintrag durch. Was siehst Du eigentlich in der Druckerwarteschlange?
Grüße
bastla
P.S.:
dann schmeiß ich doch tatsächlich wider Erwarten meinen Drucker doch nicht aus dem Fenster ...
Contenance - an der Hardware sollte es ja nicht liegen, und denk an die Unannehmlichkeiten mit der/dem / für die/den Passantin/Passanten, die/den Du dabei vielleicht getroffen hättest ...