Rubrik: Access | VB-Versionen: VBA | 22.04.08 |
Alle installierten Drucker ermitteln und anzeigen (Access 97/2000) Diese Funktion ermittelt alle verfügbaren Drucker und zeigt diese alphabetisch sortiert in einem Listfeld oder Kombinationsfeld zur Auswahl an. | ||
Autor: Dieter Otter | Bewertung: | Views: 14.514 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Vor kurzem hatten wir Ihnen gezeigt, wie man unter Access 2002 oder höher alle verfügbaren Drucker ermitteln und in alphabetischer Reihenfolge sortiert ermittelt und anzeigen kann:
Alle installierten Drucker ermitteln und anzeigen (ab Access 2002)
Da es aber durchaus noch viele Entwickler gibt, die noch immer unter Access 97 / 2000 programmieren, gibt es heute den o.g. Tipp für die Versionen Access 97 und Access 2000.
Nachfolgende Funktion GetPrinterList ermittelt alle verfügbaren Drucker und stellt diese in alphabetischer Reihenfolge sortiert als String für die Zuweisung in einem Listen- oder Kombinationsfels zusammen. Die Zuweisung erfolgt hierbei über die RowSource-Eigenschaft des Controls.
' benötigte API-Deklaration 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
' Liste aller verügbaren Drucker als Werte-Liste ' für ein List-Control ermitteln und zurückgeben Public Function GetPrinterList() As String Dim sTemp As String Dim nLen As Long Dim i As Long Dim sItem() As String Dim nCount As Long Dim nPos As Long Dim sRowSource As String ' Einträge aus Windows.ini auslesen sTemp = Space(8192) nLen = GetProfileString("PrinterPorts", vbNullString, "", sTemp, Len(sTemp)) If nLen > 0 Then sTemp = Trim$(Left$(sTemp, nLen)) If Right$(sTemp, 1) = Chr$(0) Then sTemp = Left$(sTemp, Len(sTemp) - 1) ' jetzt den String anhand vbNullChar in Array zum späteren Sortieren einlesen Do While Len(sTemp) > 0 nCount = nCount + 1 ReDim Preserve sItem(nCount - 1) nPos = InStr(sTemp, Chr$(0)) If nPos > 0 Then sItem(nCount - 1) = Left$(sTemp, nPos - 1) sTemp = Mid$(sTemp, nPos + 1) Else sItem(nCount - 1) = sTemp sTemp = "" End If Loop ' Array sortieren If nCount > 0 Then QuickSort sItem() ' String für RowSource zusammenstellen For i = 0 To nCount - 1 If Len(sRowSource) > 0 Then sRowSource = sRowSource & ";" sRowSource = sRowSource & sItem(i) Next i End If End If GetPrinterList = sRowSource End Function
Für die Sortierung des Arrays wird auch hier wieder auf den QuickSort-Algorithmus zurückgegriffen:
QuickSort in VB
Beispiel:
Platzieren Sie auf das Formular ein Kombinationsfeld (cmbPrinters) und fügen folgenden Code in das Form_Load Ereignis ein:
Private Sub Form_Load() With cmbPrinters .RowSourceType = "Value List" .RowSource = GetPrinterList() End With End Sub