Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Druckereinstellungen über VBA

Druckereinstellungen über VBA
29.12.2006 09:28:43
uwe
Hallo,
ich habe zwei Schaltflächen in ein Tool integriert. Die eine führt eine Druckfunktion aus, in der vorher das Seitenlayout angepasst wird, die andere erstellt eine PDF-Datei.
Zur Erstellung der PDF-Datei muss ich den PDF-Drucker auswählen. Dieser ist für jeden User der gleiche. Möchte ich jedoch das Tool in Excel ausdrucken, muss ich wieder den ursprünglichen Drucker (Standarddrucker) auswählen. Für meinen Fall habe ich den Drucker definiert. Sollte jedoch ein User einen anderen Drucker haben, würde er das Tool auf meinem Drucker ausdrucken.
Gibt es eine Möglichkeit, den Druckernamen nicht fest zu definieren, sondern lediglich anzugeben, dass der jeweilige Standarddrucker auszuwählen ist, den man in der Systemsteuerung/Druckerauswahl als Standard definiert hat?
Anbei das Makro für die PDF-Erstellung:

Sub PDF()
On Error GoTo Ende
Application.ActivePrinter = "eDocPrinter PDF Pro auf Ne02:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"eDocPrinter PDF Pro auf Ne02:", Collate:=True _
Application.ActivePrinter = _
"\\S.....\P...... 402.. 03.OG Raum 309 auf Ne05:" 'hier dürfte dann kein Druckername mehr stehen, sondern das Makro müsste den jeweiligen als Standard definierten Drucker einstellen.
Ende:
End Sub

Ich hoffe, Ihr könnt mir weiterhelfen.
Gruß
Uwe
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckereinstellungen über VBA
29.12.2006 09:35:01
yps
hi,
stell dem User doch den vorher eingestellten Drucker wieder zur Verfügung
macht immer einen guten Eindruck die Einstellungen eben NICHT zu verstellen

Sub bla()
Dim Drucker As String
Drucker = Application.ActivePrinter
'dein code
Application.ActivePrinter = Drucker
End Sub

cu Micha
Anzeige
AW: Druckereinstellungen über VBA
29.12.2006 11:37:39
Uwe
Hallo Micha,
vielen Dank für deine Hilfe, aber so richtig verstehe ich das Makro nicht.
Ich habe z.B. 20 verschiedene User, die jeweils für sich verschiedene Standarddrucker definiert haben. Alle User greifen aber nur auf das eine Tool zurück. D.h. es würde nicht ausreichen, wenn ich nach Erstellung der PDF-Datei den Ursprungsdrucker definiere.
Ich müsste also, anders als zu Beginn beschrieben, nicht den Standarddrucker in das Makro der PDF-Erstellung schreiben, sondern in den Druckbefehl, so dass jeder User mit Betätigung der Schaltfläche seinen individuellen Drucker einstellt.
Ich brauche also ein Makro, dass je nach User den Standarddrucker einstellt. Also

Sub drucken
'normaler Druckbefehl aus Excel
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'stelle den in der Druckereinstellung als Standard definierten Drucker ein
Makro = ?
End Sub

Entschuldige den kleinen Denkfehler, der mir unterlaufen ist. Ich hoffe, dass du mir trotzdem weiterhelfen kannst.
Gruß
Uwe
Anzeige
AW: Druckereinstellungen über VBA
29.12.2006 12:27:30
yps
hi,
sorry, ich weiss auch nach dem 27.mal lesen nicht was du eigentlich machen willst
und was ist für dich ein Standarddrucker ? Wirklich der Standarddrucker aus dem Druckmenü oder der Drucker den der User eingestellt hat(te) ?
Beschreibe mal verbal dein Vorhaben
cu Micha
AW: Druckereinstellungen über VBA
29.12.2006 13:39:33
Uwe
hi,
man kann ja mehrere Drucker eingerichtet haben, muss jedoch einen als Standarddrucker auswählen. Möchte man einen anderen Drucker als den Standarddrucker auswählen, dann muss dieser explizit eingestellt werden. Wird das Programm neu geöffnet stellt sich der Standarddrucker wieder von neuem ein. Die Einstellung des Standarddruckers erfolgt i.d.R. über die Systemsteuerung.
Jeder User, der an einem anderen PC sitzt, kann sich seinen eigenen Drucker (Standarddrucker) einstellen (je nachdem wo er sitzt).
Jeder Drucker hat also einen anderen Namen (z.B. Drucker in Raum 1, Drucker in Raum 2, etc.). Die User benutzen alle zusammen das Tool, welches auf einem zentralen Server bereitgestellt wird und von jedem zugegriffen werden kann. Daher brauche ich ein Makro für die Druckfunktion, das den jeweiligen vom User definierten Drucker einstellt, ohne dass ich einen festen Druckername angeben muss.
Ich hoffe, dass ich etwas verständlicher war.
Gruß
Uwe
Anzeige
AW: Druckereinstellungen über VBA
29.12.2006 14:07:34
yps
hi,
so stellst du den Standarddrucker aus der Systemsteuerung ein:
Option Explicit
Declare

Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
(ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Declare 

Function GetProfileSection Lib "kernel32" Alias "GetProfileSectionA" _
(ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Function GetDefaultPrinter() As String
Dim TempName As String
Dim DeviceNr As Long
TempName = String(1024, 0)
DeviceNr = GetProfileString("windows", "device", 0&, TempName, 1024)
If DeviceNr > 0 Then
GetDefaultPrinter = Left(TempName, InStr(TempName, ",") - 1)
Else
End Function

End If
End Function


Sub PDF()
On Error GoTo Ende
Application.ActivePrinter = GetDefaultPrinter
Ende:
End Sub

"Declare Function" jeweils hintereinanderschreiben (ist ein Fehler in der Darstellungsweise des Forums
cu Micha
Anzeige
AW: Druckereinstellungen über VBA
29.12.2006 15:02:37
Uwe
Hallo Micha,
ich muss zugeben, dein makro überfordert mich.
Ich habe dein Makro in mein Tool eingestellt und deine Anweisung mit "Declare Function" befolgt. Die Schaltfläche habe ich mit Sub PDF() verknüpft. Ich erhalte jedoch eine Fehlermeldung bzgl. des If-Blocks. Es wird noch ein End if benötigt. Ich konnte leider nicht den Fehler beheben. Ich habe das End if verschoben. Dadurch erhalte ich zwar keine Fehlermeldung mehr, der Standarddrucker wird jedoch auch nicht eingestellt.
Weisst du woran es liegen kann?
Gruß
Uwe
Anzeige
AW: Druckereinstellungen über VBA
29.12.2006 18:00:47
Uwe
Hallo Micha,
ich weiss zwar nicht, was du da gemacht hast, dass werde ich aber noch herausfinden.
Auf jeden Fall funktioniert es einwandfrei.
Vielen Dank für deine Hilfe.
In diesem Sinne wümsche ich dir einen guten Rutsch.
Gruß
Uwe
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Druckereinstellungen über VBA anpassen


Schritt-für-Schritt-Anleitung

Um die Druckereinstellungen in Excel über VBA zu ändern und den Standarddrucker auszuwählen, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject", dann "Einfügen" > "Modul").

  3. Kopiere und füge den folgenden Code ein:

    Option Explicit
    
    Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
    (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, ByVal nSize As Long) As Long
    
    Function GetDefaultPrinter() As String
       Dim TempName As String
       Dim DeviceNr As Long
       TempName = String(1024, 0)
       DeviceNr = GetProfileString("windows", "device", 0&, TempName, 1024)
       If DeviceNr > 0 Then
           GetDefaultPrinter = Left(TempName, InStr(TempName, ",") - 1)
       End If
    End Function
    
    Sub PDF()
       On Error GoTo Ende
       Application.ActivePrinter = GetDefaultPrinter
    Ende:
    End Sub
  4. Verknüpfe die Schaltfläche in deinem Tool mit der Subroutine PDF().

  5. Teste die Funktion, um sicherzustellen, dass der Standarddrucker korrekt ausgewählt wird.


Häufige Fehler und Lösungen

  • Fehlermeldung im If-Block: Wenn du eine Fehlermeldung wegen des If-Blocks erhältst, stelle sicher, dass du das End If richtig positionierst. Das End If muss nach der Anweisung stehen, die innerhalb des If-Blocks ausgeführt wird.

  • Der Standarddrucker wird nicht eingestellt: Überprüfe, ob die Funktion GetDefaultPrinter() korrekt aufgerufen wird. Wenn du das Makro in ein bestehendes Tool einfügst, kann es sein, dass es an anderer Stelle einen Konflikt gibt.


Alternative Methoden

Eine alternative Möglichkeit, die Druckereinstellungen über VBA zu ändern, wäre das Nutzen von Excel-eigenen Funktionen oder das Hinzufügen einer Benutzeroberfläche, um den Drucker auszuwählen. Hier ist ein Beispiel, wie du einen Dialog zur Druckerauswahl erstellen kannst:

Sub DruckerAuswählen()
    Dim DruckerName As String
    DruckerName = Application.InputBox("Gib den Namen des Druckers ein:", "Drucker auswählen", Type:=2)
    Application.ActivePrinter = DruckerName
End Sub

Praktische Beispiele

Hier sind einige Beispiele, wie du die Excel Druckeinstellungen in verschiedenen Szenarien anpassen kannst:

  1. PDF erstellen und Drucker wechseln: Du kannst zuerst die PDF-Erstellung durchführen und danach den Drucker auf den Standarddrucker zurücksetzen.

    Sub ErstellenUndDrucken()
       Call PDF  'PDF erstellen
       Application.ActivePrinter = GetDefaultPrinter  'Zurücksetzen auf Standarddrucker
       ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    End Sub
  2. Drucker für jeden Benutzer automatisch einstellen: Verwende die Funktion GetDefaultPrinter, um den Drucker automatisch auszuwählen, basierend auf den Systemsteuerungseinstellungen.


Tipps für Profis

  • Drucker als Standard definieren: Wenn du sicherstellen möchtest, dass immer der richtige Drucker verwendet wird, kannst du ein Makro erstellen, dass den Standarddrucker für jeden Benutzer beim Öffnen der Datei überprüft und gegebenenfalls ändert.

  • Druckereinstellungen speichern: Du kannst die letzten Druckereinstellungen in einer Excel-Datei speichern, um sie später wiederherzustellen, falls das nötig ist.


FAQ: Häufige Fragen

1. Wie kann ich den Standarddrucker in Excel festlegen? Um den Standarddrucker in Excel festzulegen, kannst du die Systemsteuerung verwenden. Alternativ kannst du in deinem VBA-Code die Funktion GetDefaultPrinter nutzen.

2. Gibt es eine Möglichkeit, mehrere Drucker in VBA auszuwählen? Ja, du kannst eine Liste der verfügbaren Drucker abrufen und dann den Benutzer auffordern, einen Drucker auszuwählen. Dies kann über ein Eingabefeld oder durch eine Benutzeroberfläche geschehen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige