vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Drucker   |   VB-Versionen: VB5, VB626.05.03
VB-Printer-Objekt in VBA benutzen

Kapseln des Printer-Objekts in einer ActiveX-DLL, so dass man auch unter VBA das dort fehlende Printer-Objekt wie gewohnt verwenden kann.

Autor:   Dieter OtterBewertung:  Views:  45.072 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Als VB und VBA-Programmierer haben Sie sich doch sicherlich auch schon manchmal darüber geärgert, dass das Printer-Objekt unter VBA nicht zur Verfügung steht. Dieses Manko lässt sich aber sehr leicht "beheben", indem man das Printer-Objekt einfach über eine ActiveX-DLL zur Verfügung stellt. Innerhalb VBA kann man dann die ActiveX-Klasse verwenden und somit auch das VB-Printer-Objekt

Sicherlich denkt jetzt der ein oder andere: "Ach Du meine Güte... alle Eigenschaften, Methoden usw. müssen jetzt in der ActiveX-Klasse nachgebildet werden."

Aber weit gefehlt: Es genügt völlig das Printer-Objekt, sowie die Printers-Auflistung als öffentliche Objekte zu deklarieren

Hier der Code der ActiveX-Klasse:

Option Explicit
 
' Öffentliche Objekte
Public vbPrinter As Printer
Public vbPrinters As New Collection
Private Sub Class_Initialize()
  ' Printer-Objekt
  Set vbPrinter = Printer
 
  ' vbPrinters-Collection füllen
  Dim oPrinter As Printer
  For Each oPrinter In Printers
    vbPrinters.Add oPrinter
  Next
End Sub
Private Sub Class_Terminate()
  ' Objekte zerstören
  Set vbPrinter = Nothing
  Set vbPrinters = Nothing
End Sub

Erstellen Sie ein neues Projekt und wählen als Projekttyp ActiveX-DLL. Tragen Sie unter "Projekt-Eigenschaften" als Projektname vbPrinter ein und fügen dann obigen Code in das Klassenmodul Class1 ein.

Kompilieren Sie das Projekt nun zu einer ActiveX-DLL.

Verwenden der "neuen" Printer-Klasse in VBA (Bsp.: Access 97)
Starten Sie MS-Access, erstellen ein neues Formular und platzieren einen Button auf die Form. Wechseln Sie in den VBA Code-Editor und aktivieren über das Menü Extras - Verweise die neue vbPrinter-Klasse.

Im Allgemein-Teil der Form wird die Klasse wie folgt instanziert:

Option Compare Database
Option Explicit
 
' vbPrinter-Klasse instanzieren
Private pClass As New vbPrinter.Class1

Ein kleiner Test:
Fügen Sie im Form_Load Ereignis folgenden Code ein:

Private Sub Form_Load()
  ' Name des Standard-Druckers
  MsgBox pClass.vbPrinter.DeviceName
 
  ' Alle verfügbaren Drucker anzeigen
  Dim i As Integer
  Dim sMsg As String
 
  For i = 0 To pClass.vbPrinters.Count - 1
    sMsg = sMsg + pClass.vbPrinters(i + 1).DeviceName + vbCrLf
  Next i
  MsgBox sMsg
End Sub

Wenn Sie nun unsere kleine Access-Anwendung starten, sollte eine MsgBox mit dem Namen des Standard-Druckers erscheinen. Danch wird eine weitere MsgBox mit allen verfügbaren Druckern angezeigt.

Ein kleiner Test-Ausdruck
Fügen Sie nachfolgenden Code in das Click-Event des Buttons ein.

Private Sub Button_Click()
  With pClass.vbPrinter
 
    ' Test-Ausdruck
    .ScaleMode = 6   ' Maßeinheit "mm"
 
    .CurrentX = 20: .CurrentY = 20
    .Font.Name = "Arial"
    .Font.Size = 14
    .Font.Bold = True
    pClass.vbPrinter.Print "Drucken in VBA" & vbCrLf & _
      "...mit dem bekannten VB Printer-Objekt"
 
    .CurrentX = 20: .CurrentY = 50
    .Font.Bold = False
    .Font.Size = 12
    pClass.vbPrinter.Print "Beliebiger Text, der autom. am " & _
      "rechten Rand umgebrochen wird..."
 
    ' Bild drucken
    .PaintPicture LoadPicture("IrgendeinBild.gif"), 20, 100
 
    ' Wichtig: Wenn Druckauftrag beendet, dann...
    .EndDoc
  End With
End Sub

Das Beispielprojekt und auch die ActiveX-DLL finden Sie auf unserer  vb@rchiv CD



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.