PDA

Vollständige Version anzeigen : VBA Printer List


DrudgeLord
13.06.2009, 12:18
Hallo Leute bin sowas von neu hier. :p
(also net böse sein aber von VBA hab ich keinen tau)

Mein Freund der gerade in Kosovo sitzt hat mich gebeten einen VBA Code zu schicken,
der nix anderes machen soll wie die Druckernamen vom System auszulesen.

(zb. wenn Word gestartet wird und auf Drucken geh zeigt er auch die Namen von den verschiedenen Drucker an)

daher hab ich das hier im I-net gefunden:

____________________________________________________
Option Explicit

Private Sub Form_Load()
Dim i As Integer
Dim PrinterName As String

For i = 0 To Printers.Count - 1
PrinterName = Printers(i).DeviceName
PrinterName = PrinterName & " (" & Printers(i).Port & ")"
List1.AddItem PrinterName

If Printer.DeviceName = Printers(i).DeviceName Then
Label1.Caption = "Standarddrucker: " & PrinterName
End If
Next i
End Sub
_____________________________________________________

Nur meint er aber das er die Printers.Count nicht hat.
(warum auch immer i kenn mi nix aus) :(

Ich weiss nur das er die Makros in Word schreibt & keinen I-net zugang hat um selbst zu suchen.

Könnt ihr mir Tipps geben wie ich ihm helfen kann ?

Lg. @ All

J_Eilers
15.06.2009, 08:01
Hi,

Welches Betriebssystem und welches Office verwendet er?

Bernd_G
15.06.2009, 08:27
Der folgende Code gibt die Drucker im Direktbereich aus.
Das sollte Dein Kumpel auf seine Bedürfnisse zuschneiden können.

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

Public Sub PrinterList()
Dim strBuffer As String
Dim strOnePtr As String
Dim intPos As Integer
Dim lngChars As Long

strBuffer = Space(2048)
lngChars = GetProfileString("PrinterPorts", vbNullString, "", strBuffer, Len(strBuffer))

If lngChars > 0 Then
intPos = InStr(strBuffer, Chr(0))
Do While intPos > 1
strOnePtr = Left(strBuffer, intPos - 1)
strBuffer = Mid(strBuffer, intPos + 1)
intPos = InStr(strBuffer, Chr(0))
Debug.Print strOnePtr
Loop
End If

End Sub

Hotte
16.06.2009, 00:48
Hi,

...... und hier mal als Datei (http://www.ms-office-forum.net/forum/showthread.php?t=160717) .... (mit Forensuche wäre das nicht passiert...):cool:

Ist aber auch API wie der Code von Bernd....

Es geht übrigens nur mit API ... das kann VBA nicht.

CptChaos
17.06.2009, 10:09
Muss es denn zwingend aus VBA heraus sein?
Per VBS lässt sich das ganze wie folgt realisieren:WScript.Echo "================================="
WScript.Echo "Following Printers are installed:"
WScript.Echo "=================================" & vbNewLine

strComputer = "." 'local Computer
intCount = 1
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colPRT = objWMI.ExecQuery ("SELECT * FROM Win32_Printer")

For Each objPRT in colPRT
WScript.Echo " Printer: " & objPRT.DeviceID
WScript.Echo " - Port: " & objPRT.PortName
WScript.Echo " - Default: " & objPRT.Default
WScript.Echo " ----------------------------"
intCount = intCount + 1
Next

WScript.Echo vbNewLine & "Found " & intCount & " Printer." & vbNewLine

Der Code liese sich ggf. auch für VBA anpassen.