Autor
|
Thema: Druckernamen aus Liste auswählen ... (6194 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 23. Feb. 2006 12:44 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, leider funzt die Suche heute bei mir nicht, daher weiß ich nicht, ob das Thema schon mal behandelt wurde. ------------------------------------------------ Betrifft VBA Excel 2003 Ich finde einfach keine Lösung. Problem: Der Anwender soll aus einer Liste der installierten Drucker einen auswählen, den Name dieses Druckers brauche ich als String. Er soll jedoch nicht als aktueller Drucker eingestellt werden! In VB6 würde ich das mit dem Printers-Object machen: Eine Form mit einer Combobox, dann... Code: Private Sub Form_Load() Dim X As Integer Dim Printername As String'Die Combobox mit vorhandenen Druckern füllen For X = 0 To Printers.Count - 1 Printername = Printers(X).DeviceName Me.Combo1.AddItem Printername Next X ... End Sub
Leider gibt es Printer und Printers in VBA nicht. Nun habe ich es mit dem Commondialog-Objekt und mit Application.Dialogs(xlDialogPrint).Show versucht. Die haben aber leider beide den Fehler, dass sie mir den Standard-Drucker verstellen. Außerdem will ich gar nicht den gesamten Druckerdialog sehen, sondern nur einen Namen aus einer Liste wählen, den ich dann als String weiter verwenden kann. Ich weiß jetzt auch nicht, wie ich den Standarddrucker auslesen bzw. setzen kann, Application.ActivePrinter gibt mir ja nur den für die Anwendung gesetzten Drucker zurück.Ich steh auf dem Schlauch. ------------------ Klaus www.al-ko.com privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Feb. 2006 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 23. Feb. 2006 14:52 <-- editieren / zitieren --> Unities abgeben:
Boah...das ist ja ein Hammer.. Aber mit Geduld und Spucke fängt man eine Mucke... Leider fehlt mir da jetzt noch der Druckerpfad, der reine Druckername in der Form "HP Laserjet 4050 Series PCL 6" reicht dem blöden Excel ja nicht - bei Word ist das komischerweise ausreichend - Excel will die Druckerangabe ja leider komplett mit ner Pfadangabe in der Form "HP Laserjet 4050 Series PCL 6 auf Ne05:" Und genau das " Ne05" kann man nirgends direkt auslesen. Das 05 entspricht aber genau dem laufenden Zähler in dem o.g. Beispiel, so kann man das selber noch dazu basteln. Hat mir durchaus sehr weiter geholfen. Obwohl das ein riesen Aufwand ist, um eine Liste von Druckernamen zu erstellen. Naja, Microsoft halt... ------------------ Klaus www.al-ko.com privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 23. Feb. 2006 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus, so wild ist es nicht:
Code:
Option ExplicitPrivate 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 Private Const MAX_PRINTERS = 16 Private strPrinterNames(MAX_PRINTERS) As String Private strPrinterDrivers(MAX_PRINTERS) As String Private strPrinterPorts(MAX_PRINTERS) As String Private intPrinterCount As Integer Public Sub prcGetPrinterList() Dim strBuffer As String Dim intIndex As Integer strBuffer = Space$(8192) GetProfileString "PrinterPorts", vbNullString, "", _ strBuffer, Len(strBuffer) prcGetPrinterNames strBuffer prcGetPrinterPorts For intIndex = 0 To intPrinterCount Debug.Print strPrinterNames(intIndex), _ strPrinterPorts(intIndex), _ strPrinterDrivers(intIndex) Next End Sub Private Sub prcGetPrinterNames(ByVal strBuffer As String) Dim intIndex As Integer Dim strName As String intPrinterCount = 0 Do intIndex = InStr(strBuffer, Chr(0)) If intIndex > 0 Then strName = Left$(strBuffer, intIndex - 1) If Len(Trim$(strName)) > 0 Then strPrinterNames(intPrinterCount) = Trim$(strName) intPrinterCount = intPrinterCount + 1 End If strBuffer = Mid$(strBuffer, intIndex + 1) Else If Len(Trim$(strBuffer)) > 0 Then strPrinterNames(intPrinterCount) = Trim$(strBuffer) intPrinterCount = intPrinterCount + 1 End If strBuffer = "" End If Loop While (intIndex > 0) And (intPrinterCount < MAX_PRINTERS) End Sub Private Sub prcGetPrinterPorts() Dim strBuffer As String Dim intIndex As Integer For intIndex = 0 To intPrinterCount - 1 strBuffer = Space$(1024) GetProfileString "PrinterPorts", strPrinterNames(intIndex), "", _ strBuffer, Len(strBuffer) prcGetDriverAndPort strBuffer, strPrinterDrivers(intIndex), _ strPrinterPorts(intIndex) Next End Sub Private Sub prcGetDriverAndPort(ByVal Buffer As String, _ DriverName As String, PrinterPort As String) Dim intDriver As Integer Dim intPort As Integer DriverName = "" PrinterPort = "" intDriver = InStr(Buffer, ",") If intDriver > 0 Then DriverName = Left$(Buffer, intDriver - 1) intPort = InStr(intDriver + 1, Buffer, ",") If intPort > 0 Then PrinterPort = Mid$(Buffer, intDriver + 1, _ intPort - intDriver - 1) End If End If End Sub
------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 24. Feb. 2006 08:31 <-- editieren / zitieren --> Unities abgeben:
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 24. Feb. 2006 12:03 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|