Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Druckernamen aus Liste auswählen ...

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Druckernamen aus Liste auswählen ... (6194 mal gelesen)
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 23. Feb. 2006 12:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Mahlzeit Klaus,

schau' Dich mal hier etwas um: http://www.michael-schwimmer.de/xlMain.htm

zB ganz unten >>> Infos über Drucker, ist recht komplex, aber vielleicht hilfts etwas.

Viel Glück,
Nancy

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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 23. Feb. 2006 14:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 23. Feb. 2006 16:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Hallo Klaus,

so wild ist es nicht:

Code:

Option Explicit

Private 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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super, 
das wär's genau gewesen!!!

Leider hab ich schon die andere Lösung eingebaut, geht auch, ist nur wesentlich aufwändiger.

Aber beim nächten Mal nehm ich dieses!

Danke euch allen, habt mir mal wieder sehr weiter geholfen!!!
   

------------------
Klaus
ich beiß dich...
www.al-ko.com


privat...

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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 24. Feb. 2006 12:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Huhu Nepumuk.

Jetzt habe ich doch dein Teil eingebaut.
Die andere Lösung hat mir nicht zuverlässig den richtigen Anschlussnamen geliefert. Das hat zwar bei mir funktioniert, aber nicht bei allen anderen Kollegen.
Aber so ist das auch eine ganze Nummer kleiner und damit feiner 

Herzlichen Dank nochmal.

------------------
Klaus
ich beiß dich...
www.al-ko.com


privat...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz