Der 1. Drucker wird ausgewählt
Set Application.Printer = Application.Printers(0)
Der 2. Drucker wird ausgewählt
Set Application.Printer = Application.Printers(1)
Der 3. Drucker wird ausgewählt
Set Application.Printer = Application.Printers(2)
Der 1. Drucker wird ausgewählt
Set Application.Printer = Application.Printers(0)
Der 2. Drucker wird ausgewählt
Set Application.Printer = Application.Printers(1)
Der 3. Drucker wird ausgewählt
Set Application.Printer = Application.Printers(2)
Auslesen der „Printers“-Auflistung und den Wechsel des Standarddruckers demonstriert. Dazu zeigt das Formular „Standarddrucker wechseln“ der zunächst den aktuellen Standarddrucker zur Information an. Über ein Kombinationsfeld, das alle verfügbaren Drucker auflistet, kann dann der gewünschte Drucker gewählt und per Klick auf SETZEN aktiviert werden.
So funktioniert die Umschaltung
Über die Eigenschaft „Application.Printer.DeviceName“ lässt sich der jeweils gesetzte Standarddrucker auslesen. „Application.Printer“ stellt ein „Printer“-Objekt dar, das dem aktuell eingestellten Standarddrucker entspricht. Die Eigenschaft „DeviceName“ liefert dann den betreffenden Namen, so wie er beispielsweise auch im Dialog DATEI-DRUCKEN in der Liste NAME angezeigt wird.
Für die Anzeige der installierten Drucker im Kombinationsfeld lesen wir die „Printers“-Auflistung beim Öffnen des Formulars aus und fügen die einzelnen Druckernamen der Liste „clDrucker“ über die Methode „AddItem“ hinzu:
Private Sub Form_Load()
Dim prtLoop As Printer
Zunächst wird eine Objektvariable „prt-Loop“ vom Datentyp „Printer“ deklariert, die anschließend in einer „For..Each“- Schleife für den Zugriff auf die einzelnen „Printer“-Objekte in der „Printer“-Auflistung verwendet wird.
Me.txtStandard = Application.Printer.DeviceName
Hier wird der Name des aktuell gesetzten Standarddruckers über „Application.Printer“ ausgelesen und zur Information in einem Textfeld im Formular angezeigt.
Me.txtStandard = Application.Printer.DeviceName
With Me.clDrucker
For Each prtLoop In Application.Printers
.AddItem prtLoop.DeviceName
Next ‚prtLoop
End With
Für die Identifikation eines Druckers ist immer der Name aus der Eigenschaft „DeviceName“ ausschlaggebend, sodass wir diesen Namen zur Liste hinzufügen.
Me.clDrucker = Me.txtStandard
Sind alle Drucker ausgelesen, wird die Auswahl in der Liste abschließend als Vorgabe auf den aktuell eingestellten Standarddrucker eingestellt.
Ein Klick auf die Schaltfläche SETZEN aktiviert den in der Liste NEUER STANDARDDRUCKER eingestellten Drucker als Standarddrucker für Access. Die Einstellungen über Systemsteuerung / Drucker bezüglich des von Windows verwendeten Standarddruckers werden dadurch nicht geändert! Außerdem gilt diese Änderung nur für die aktuelle Sitzung! Der aktivierte Drucker kommt nur innerhalb von Access für alle Druckausgaben und für Berichte zum Einsatz, in denen über SEITE EINRICHTEN die Option STANDARDDRUCKER eingestellt wurde.
Nach einem Klick auf die Schaltfläche SETZEN wird die Ereignisprozedur „Beim Klicken“ der Schaltfläche ausgeführt:
Private Sub btnSetStd_Click()
Dim strPrinter As String
Dim prtNew As Printer
On Error Resume Next
strPrinter = Me.clDrucker
If Err <> 0 Then
Beep
Exit Sub
End If
On Error GoTo 0
Set prtNew = Printers(strPrinter) ‚Gewählten Drucker auslesen…
Set Application.Printer = prtNew ‚…und als Standard setzen
Me.txtStandard = Application.Printer.DeviceName
End Sub
„Printer“-Objekt initialisieren
Wie bereits erwähnt verweist „Application.Printer“ auf ein „Printer“-Objekt, das dem aktuell eingestellten Standarddrucker entspricht. Um einen neuen Standarddrucker zu definieren, ist es erforderlich, das aktuelle „Printer“-Objekt durch ein anderes zu ersetzen. Dazu wird ein zweites, temporäres „Printer“-Objekt, hier deklariert als „prtNew“, eingesetzt. Für dieses „Printer“-Objekt lesen wir das zum ausgewählten Drucker gehörende „Printer“-Objekt über „Set prtNew = Printers(str Printer)“ aus der „Printers“-Auflistung aus. Die Zuweisung „Set Application.Printer = prtNew“ sorgt anschließend dafür, dass Access das neue „Printer“- Objekt als Standarddrucker aktiviert.
Quick-Tipp: Alternative Schleifenkonstruktion
Alternativ zur „For..Each“-Schleife können Sie für das Auslesen der installierten Drucker über „Printers“ auch eine „normale“ Schleife mit Zählvariable einsetzen. Für die Terminierung der Schleife lesen Sie dazu die Eigenschaft „Printers.Count“ aus, die Auskunft über die Anzahl installierter Drucker gibt: Die „Printers“-Auflistung wird, wie andere Access-Auflistungen auch, über eine Indexnummer von „0“ bis „Count-1“ adressiert.
Sub Test1()
Dim intAnz As Integer,
I As Integer intAnz = Printers.Count – 1
For I = 0 To intAnz
Debug.Print Printers(I).DeviceName
Next I
End Sub
Viele Drucker stellen Spezialfunktionen zur Verfügung. Das „Printer-Objekt“ verfügt über verschiedene Eigenschaften, mit denen Sie zum Beispiel einen Duplex- oder einen Entwurfsdruck einschalten oder die Anzahl der Kopien festlegen können.
Das Formular „Spezialfunktionen von Druckern nutzen“ aus unserer Beispieldatenbank demonstriert diese zusätzlichen Möglichkeiten. Sie können hier den Duplex- oder Entwurfsdruck einschalten oder den Bericht mit einer beliebigen Anzahl von Kopien ausdrucken.
Die Umsetzung dieser Funktionen ist recht einfach, da das „Printer“-Objekt entsprechende Eigenschaften bereitstellt. Im Folgenden der entsprechende Ausschnitt aus der Ereignisprozedur „Beim Klicken“ der Schaltfläche DRUCKEN:
If Me.cbDuplex Then R.Printer.Duplex = acPRDPHorizontal
If Me.cbKopien Then R.Printer.Copies = Me.txtKopien
If Me.cbEntwurf Then R.Printer.PrintQuality = acPRPQDraft
Hier fragen wir der Reihe nach die Kontrollkästchen des Formulars ab. Ist ein Kontrollkästchen aktiviert, wird die dazugehörige Eigenschaft beziehungsweise die Anzahl gewünschter Kopien gesetzt. Andernfalls nutzt Access die Standardeinstellungen dieser Eigenschaften, also z. B. die normale Qualität oder eine Kopie.
Eine falsche Einstellung des Standarddruckers von Access hat nicht selten fatale Auswirkungen: Wird ein Bericht ausgedruckt, für den die Option STAN DARD – DRUCKER eingestellt ist, kann es teuer werden, wenn beispielsweise eine einfache Liste nicht wie vorgesehen auf dem Tintenstrahldrucker, sondern auf dem irrtümlich als Standarddrucker eingestellten kostenintensiven Farblaserdrucker ausgegeben wird.
Umgekehrt werden Papier und Zeit verschwendet, wenn die aufwändig gestaltete Auswertung mit farbigen Diagrammen und Grafiken plötzlich im Ausgabeschacht des qualitativ unzureichenden Tintenstrahldruckers liegt.
Solchen Problemen können Sie vorbeugen, indem Sie über ein „AutoExec“- Makro den Standarddrucker beim Öffnen einer Datenbank generell zurücksetzen. Sie finden dazu im Modul „modDruckFunktionen“ in der Beispieldatenbank die folgende Funktion „SetStd – Printer()“:
Function SetStdPrinter(strPrinter As String)
Dim prtNew As Printer
On Error Resume Next
Set prtNew = Printers(strPrinter) ‚Gewünschten Drucker auslesen…
Set Application.Printer = prtNew ‚…und als Standard setzen
End Function
Die Funktion erwartet als Parameter den Namen des zu setzenden Standarddruckers, wie beispielsweise „HP DeskJet 710C“ bzw. wie er sich aus „Printers(x).Device – Name“ auslesen oder im Dialog „Drucken“ ablesen lässt. Sie entspricht der Ereignisprozedur „Beim Klicken“ der Schaltfläche SETZEN, die im vorherigen Beitrag erläutert wurde.
Hier wird gemäß dem als Parameter angegebenem Druckernamen ein „Printer“-Objekt initialisiert, das dann das „Printer“- Objekt des Standarddruckers ersetzt und somit einen anderen Standarddrucker aktiviert.
Makro „AutoExec“ einrichten
Um den Aufruf zu automatisieren, legen Sie ein „AutoExec“-Makro an und fügen dort die Aktion „AusführenCode“ ein oder ergänzen ein vorhandenes „AutoExec“- Makro um diese Aktion.
Als Parameter „Funktionsname“ geben Sie „SetStd Printer(„DruckerName“)“ an, wobei Sie „DruckerName“ durch den Namen des zu setzenden Druckers ersetzen.
Speichern Sie das Modul unter den Namen „modDruckFunktion“ ab.
Häufig möchten Sie ein Formular über den Standarddrucker im Querformat drucken. Dazu können Sie Druckereigenschaften für Formulare direkt über deren Objekt „Printer“ ändern. Um beispielsweise das aktuelle Formular im Querformat auszugeben, kommen folgende Anweisungen hinter einer Schaltfläche zum Einsatz:
Sub btnHardcopie()
Dim F As Form
Set F = Forms(„Artikel“)
F.Printer.Orientation = acPRORLandscape
DoCmd.PrintOut
F.Printer.Orientation = acPRORPortrait
End Sub
Diese Anweisungen setzen zunächst in der Objektvariablen „F“ eine Referenz auf das gewünschte Formular (hier „Artikel“). Über „F.Printer“ ist dann ein Zugriff auf die Druckereigenschaften möglich. „Orientation“ legt dabei fest, ob das Objekt im Hochoder Querformat ausgedruckt werden soll, wobei hier „acPRORLandscape“ das Querformat spezifiziert. „DoCmd.PrintOut“ druckt das gewünschte Objekt aus, anschließend setzen wir das Seitenformat wieder auf Standard/Hochformat zurück.
Viele Drucker stellen Spezialfunktionen zur Verfügung. Das „Printer-Objekt“ verfügt über verschiedene Eigenschaften, mit denen Sie zum Beispiel einen Duplex- oder einen Entwurfsdruck einschalten oder die Anzahl der Kopien festlegen können.
Das Formular „Spezialfunktionen von Druckern nutzen“ aus unserer Beispieldatenbank demonstriert diese zusätzlichen Möglichkeiten. Sie können hier den Duplex- oder Entwurfsdruck einschalten oder den Bericht mit einer beliebigen Anzahl von Kopien ausdrucken.
Die Umsetzung dieser Funktionen ist recht einfach, da das „Printer“-Objekt entsprechende Eigenschaften bereitstellt. Im Folgenden der entsprechende Ausschnitt aus der Ereignisprozedur „Beim Klicken“ der Schaltfläche DRUCKEN:
If Me.cbDuplex Then R.Printer.Duplex = acPRDPHorizontal
If Me.cbKopien Then R.Printer.Copies = Me.txtKopien
If Me.cbEntwurf Then R.Printer.PrintQuality = acPRPQDraft
Hier fragen wir der Reihe nach die Kontrollkästchen des Formulars ab. Ist ein Kontrollkästchen aktiviert, wird die dazugehörige Eigenschaft beziehungsweise die Anzahl gewünschter Kopien gesetzt. Andernfalls nutzt Access die Standardeinstellungen dieser Eigenschaften, also z. B. die normale Qualität oder eine Kopie.
Aufgrund eines Fehlers können Sie mit der ersten Version von Access 2007 keinen Spezialdrucker für Berichte nutzen, da diese Einstellung dort nicht dauerhaft gespeichert wird und die Einstellung immer wieder auf „Standarddrucker“ zurückgesetzt wird. Diesen Bug hat Microsoft zwar mit dem Service Pack 1 (SP1) für Office 2007 repariert, aber damit ein neues Problem geschaffen: Die mit Access 2007/SP1 erstellten Datenbanken können mit Access 2007 ohne Service Pack nicht geöffnet werden.
Um unter Access 2007 ohne SP1 trotzdem einen Spezialdrucker nutzen zu können, müssen Sie für die Ausgabe des Berichtes per VBA vorübergehend den Standarddrucker von Access auf den benötigten Spezialdrucker umstellen. Dazu gehen Sie folgendermaßen vor:
In Zukunft kann der Bericht nun trotz Bug einfach nach Öffnen per Doppelklick auf dem Spezialdrucker ausgedruckt werden.
Access bietet standardmäßig keine Möglichkeit, die erste Seite und die Folgeseiten eines Berichtes jeweils über unterschiedliche Schächte eines Druckers auszugeben. Basierend auf der Lösung für die Ausgabe eines Berichtes auf einem beliebigen Drucker, können Sie dieses Manko aber schnell beheben.
Für die Festlegung der zu verwendenden Papierschächte stellt das „Printer“-Objekt eine Eigenschaft „PaperBin“ zur Verfügung. Diese Eigenschaft lässt sich auf eine Konstante wie z. B.„acPRBNUpper“, „acPRBNManual“ oder „acPRBNCassette“ setzen und es lässt sich so gezielt bestimmen, aus welchem Schacht das Papier für den Ausdruck eingezogen werden soll. Die möglichen Einstellungen werden im Formular „Drucken über verschiedene Schächte“ über die Kombinationsfelder SCHACHT 1. SEITE und SCHACHT FOLGESEITEN zur Auswahl angezeigt.
Für die Steuerung der Druckausgabe wird die Möglichkeit genutzt, bei der Anweisung „DoCmd.PrintOut“ die Parameter „PrintPages“ und „PageFrom“ beziehungsweise „PageTo“ angeben zu können. Der entsprechende Ausschnitt der Ereignisprozedur „Beim Klicken“ der Schaltfläche DRUCKEN sieht folgendermaßen aus:
R.Printer.PaperBin = Me.clSchachtErste
Zunächst wird der Schacht für die Ausgabe der ersten Seite auf die in der Liste SCHACHT 1. SEITE gewählte Einstellung gesetzt.
DoCmd.SelectObject acReport,strReport, False
DoCmd.PrintOut acPages, 1, 1
Der Bericht wird selektiert und derAusdruck gestartet, wobei die Parameter „acPages, 1, 1“ ihn auf die erste Seite beschränken.
R.Printer.PaperBin = Me.clSchachtRest
DoCmd.PrintOut acPages, 2, 999
Anschließend werden die Einstellungen für die Folgeseiten aus dem Kombinationsfeld in die Eigenschaft „PaperBin“ übertragen und die restlichen Seiten ausgedruckt. Wenn Sie Berichte mit mehr als 999 Seiten haben, erhöhen Sie den Wert für „PageTo“ einfach auf „9999“. Sind mehr Seiten angegeben, als der Bericht umfasst, ignoriert Access diesen Umstand und löst keinen Laufzeitfehler aus.
Eingangs hatten wir bereits erläutert, dass Berichte und Formulare über eine Eigenschaft „Printer“ verfügen, die das „Printer“-Objekt des Druckers darstellt, der für den Ausdruck verwendet werden soll.
Wurde für den Bericht über SEITE EINRICHTEN auf der Registerkarte „Seite“ die Option STAN DARDDRUCKER eingestellt, setzt Access das „Printer“-Objekt des Berichtes auf „Application.Printer“. Sie können diese Einstellung übrigens über die Eigenschaft „UseDefaultPrinter“ des Berichtes abfragen. Wenn für den Bericht die Option SPEZIELLER DRUCKER eingestellt und ein entsprechender Drucker gewählt wurde, speichert Access den Bericht mit dem zum ausgewählten Drucker gehörenden, aus der „Printers“-Auflistung ausgelesenen „Printer“-Objekt.
Um nun einen Bericht auf einem anderen Drucker auszugeben, muss das „Printer“- Objekt des Berichtes vor dem Ausdruck durch das „Printer“-Objekt des gewünschten Druckers ersetzt werden. In der Beispieldatenbank wird das im Formular „Bericht über beliebigen Drucker ausgeben“ demonstriert.
Im Formular sehen Sie zwei Listen: eine Liste BERICHTE, die die in der aktuellen Datenbank verfügbaren Berichte auflistet, und eine Liste DRUCKER mit den auf dem System verfügbaren Druckern.
Nach Auswahl des Berichtes und des gewünschten Druckers startet ein Klick auf die Schaltfläche DRUCKEN den Ausdruck auf dem eingestellten Drucker. Wenn die Option VORSCHAU aktiviert ist, er folgt eine Anzeige des Berichtes in der Seitenansicht auf dem Bildschirm.
So funktioniert die gezielte Ausgabe
Die Ereignisprozedur „Beim Klicken“ der Schaltfläche DRUCKEN führt folgende Anweisungen aus:
Private Sub btnDruck_Click()
Dim R As Report, strReport As String, strPrinter As String, strStdPrinter As String
Dim prtCurr As Printer
On Error Resume Next
strReport = Me.lstBerichte.Value
If Err <> 0 Then
Beep
Exit Sub
End If
Err = 0
strPrinter = Me.clDrucker
If Err <> 0 Then
Beep
Exit Sub
End If
On Error GoTo 0
Hier werden zunächst der gewählte Bericht und der dafür eingestellte Drucker ausgelesen. Kommt es da bei zu einem Fehler, weil eine der beiden Einstellungen noch nicht erfolgt ist, gibt es einen akustischen Hinweis und die Routine wird verlassen.
strStdPrinter = Application.Printer.DeviceName
Für einen später folgenden Vergleich lesen wir hier den aktuell gesetzten Standarddrucker aus.
strStdPrinter = Application.Printer.DeviceName
DoCmd.OpenReport strReport, acViewPreview, , , acHidden
Set R = Reports(strReport)
If R.UseDefaultPrinter And strPrinter = strStdPrinter Then GoTo PrtOK
Wie erwähnt muss das „Printer“-Objekt des Berichtes durch das „Printer“-Objekt des gewünschten Druckers ersetzt werden. Dazu wird der Bericht zunächst in der Vorschau und im Modus „Versteckt“ geöffnet, um ein störendes Flackern des Bildschirms durch die folgenden Zugriffe zu vermeiden.
Danach wird eine Referenz auf den Bericht in die Variable „R“ gesetzt, um die weiteren Zugriffe zu vereinfachen. Im Anschluss erfolgt über „UseDefault Printer“ eine Prüfung, ob die Ausgabe auf dem Standarddrucker erfolgen soll und ob er bereits als Ausgabedrucker gewählt wurde. Ist das der Fall, sind keine weiteren Aktionen notwendig.
Die folgenden Anweisungen werden dann durch eine Verzweigung an die Marke „Prt OK“ übersprungen.
Set prtCurr = Printers(strPrinter) ‚Gewählten Drucker auslesen…
Set R.Printer = prtCurr ‚…und für Bericht setzen
Andernfalls muss das „Printer“-Objekt des Berichtes durch das „Printer“-Objekt des gewählten Druckers ersetzt werden. Dazu wird ein neues, temporäres „Printer“-Objekt „prtCurr“ verwendet, das über „Set prtCurr = Printers(strPrinter)“ zunächst entsprechend initialisiert wird. Mit „Set R.Printer = prtCurr“ wird das „Printer“-Objekt dann dem Bericht zugewiesen und aktiviert.
PrtOK:
If Me.cbPreview Then
DoCmd.OpenReport strReport, acViewPreview
Else
On Error Resume Next
Application.Echo False
DoCmd.SelectObject acReport, strReport, False
DoCmd.PrintOut
DoCmd.Close acReport, strReport
Application.Echo True
End If
End Sub
Anschließend wird abhängig vom Status der Option VORSCHAU der Bericht in der Seitenansicht angezeigt oder der versteckte Bericht selektiert, ausgedruckt und dann wieder geschlossen.
Wichtige Besonderheiten im Formular
In der Liste BERICHTE erscheint neben dem Namen der Berichte der jeweils eingestellte Drucker. Diese Informationen werden beim Öffnen des Formulars wie im folgenden Ausschnitt gezeigt ausgelesen.
Private Sub Form_Load()
Dim db As DATABASE
Dim conTmp As Container
Dim docTmp As Document
Dim strX As String, strReport As String, R As Report
Dim prtLoop As Printer
Me.txtStandard = Application.Printer.DeviceName
Set db = CurrentDb()
Set conTmp = db.Containers(„Reports“)
With Me.lstBerichte
For Each docTmp In conTmp.Documents
strReport = docTmp.Name
DoCmd.OpenReport strReport, acViewPreview, , , acHidden
Set R = Reports(strReport)
If R.UseDefaultPrinter Then
strX = strReport & „;Standard“
Else
strX = strReport & „;“ & R.Printer.DeviceName
End If
DoCmd.Close acReport, strReport, acSaveNo
.AddItem strX
Next docTmp
End With
Me.lstBerichte = Me.lstBerichte.Column(0, 0)
With Me.clDrucker
For Each prtLoop In Application.Printers
.AddItem prtLoop.DeviceName
Next ‚prtLoop
End With
Me.clDrucker = Me.txtStandard
End Sub
Der entscheidende Teil ist im Listing fett hervorgehoben.
Die „Reports“-Auflistung des „Database. Containers“-Objektes liefert zunächst die Namen der einzelnen Berichte. Diese werden versteckt in der Vorschau geöffnet und per Objektvariable „R“ referenziert.
Mit dem Kommando „UseDefaultPrinter“ auf „True“, wird „Standard“ als Drucker verwendet.
Andernfalls lesen wir über „Printer.Device- Name“ den Namen des Druckers aus und fügen diese Information zur Anzeige hinzu.
Bei der Erfassung von Datensätzen zeigt Access erst dann eine Fehlermeldung zur Primarschlüsselverletzung an, wenn der komplette Datensatz erfasst ist und dauerhaft gespeichert werden soll. Die Speicherung nimmt Access automatisch vor, wenn Sie den Datensatz wechseln oder eine Funktion über das Hauptmenü bzw. die Multifunktionsleiste oder eine Symbolleiste aktivieren.
Sinnvoller wäre natürlich eine Prüfung, bevor Sie mühsam und unter Umständen vergebens alle Felder des Datensatzes gefüllt haben.
Das lässt sich relativ einfach mit einer kleinen VBA-Routine erledigen, die aber nur in Formularen zum Einsatz kommen kann, da Access in Tabellen keine Ereignisprozeduren zur Verfügung stellt.
Dazu zunächst ein paar Hintergrundinformationen: Wenn Sie die Eingabe in einem Feld abschließen, ruft Access die Ereignisprozedur „Nach Aktualisierung“ auf. Haben Sie also beispielsweise den Nachnamen des Kunden eingegeben und drücken dann die Eingabe-, Tab- oder eine Cursor-Taste oder wechseln per Maus in ein anderes Feld, so werden die für die Ereignisprozedur „Nach Aktualisierung“ eingegebenen Anweisungen ausgeführt.
Diese Anweisungen könnten nun z. B. in der Tabelle „Kunden“ nachschlagen, ob zum gerade eingegebenen Nachnamen bereits ein Datensatz vorhanden ist, und dessen Details anzeigen. So ließe sich die mühsame komplette Erfassung aller Felder schon an dieser Stelle abbrechen. In der Beispieldatenbank zu diesem Beitrag finden Sie die Tabelle „Kunden“ und das gleichnamige Formular „Kunden“, in das wir eine solche „Vorabprüfung“ zu Demonstrationszwecken eingebaut haben.
Nach der Eingabe des Nachnamens erfolgt hier sofort eine Prüfung. Erkennen Sie anhand der Meldung, dass Sie einen bereits vorhandenen Kunden erneut anlegen wollen, drücken Sie einfach die Esc-Taste, um die Neuanlage abzubrechen.
So funktioniert die VBA-Routine
Beim Aufruf der Ereignisprozedur „Nach Aktualisierung“ des Feldes „Nachname“ werden die folgenden Anweisungen ausgeführt:
Private Sub Nachname_AfterUpdate()
Dim strNachname As String, strSQL As String, strMsg As String
Dim lngAnz As Long, I As Integer, db As DATABASE, rs As Recordset
On Error Resume Next
strNachname = Me.Nachname
If Err <> 0 Then
Beep
Exit Sub
End If
Hier lesen wir zunächst den eingegebenen Nachnamen aus dem Feld „Nachnamen“ aus und weisen ihn der Variablen „str Nachname“ zu.
Tritt dabei ein Fehler auf, so war das Feld leer. Es gibt demzufolge nichts zu überprüfen und die Routine wird mit einem akustischen Hinweis verlassen.
strSQL = „select * from Kunden where Nachname = ‚“ & strNachname & „‚“
Set db = CurrentDb()
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
Andernfalls initialisieren wir ein Recordset, das alle Datensätze der Tabelle „Kunden“ beinhaltet, bei denen das Feld „Nachname“ den gleichen Inhalt wie der eingegebene Nachname hat.
Err = 0
rs.MoveLast
If Err <> 0 Then ‚OK, nichts gefunden…
rs.Close
Exit Sub
End If
lngAnz = rs.RecordCount
rs.MoveFirst
Dann prüfen wir, ob und, wenn ja, wie viele Datensätze gefunden wurden. „rs.Move- Last“ generiert eventuell einen Fehler, wenn das Recordset keine Datensätze beinhaltet, wenn also keine Datensätze zum betreffenden Nachnamen gefunden wurden. Wir schließen dann das Recordset und verlassen die Routine ohne weitere Aktionen, da eine Doppelerfassung nicht gegeben ist.
Andernfalls halten wir die Anzahl gefundener Datensätze gemäß „rs.RecordCount“ in der Variablen „lngAnz“ für die folgende Schleife fest.
strMsg = „Folgende Datensätz zu »“ + strNachname + „« existieren bereits:“ + vbCrLf + vbCrLf
For I = 1 To lngAnz
strMsg = strMsg & rs(„Nachname“) & „, “ & rs(„Vorname“) & “ in “ & rs(„Ort“) & vbCrLf
rs.MoveNext
Next I
rs.Close
Beep
MsgBox strMsg, vbOKOnly + vbInformation, „Hinweis:“
End Sub
Anschließend lesen wir in dieser Schleife alle Datensätze aus und halten Nachnamen, Vornamen und Ort in einer Variablen „strMsg“ für die Anzeige fest. Diese Anzeige erfolgt dann abschließend, nachdem das Recordset geschlossen und ein akustischer Hinweis ausgegeben wurde, über die „MsgBox“-Anweisung.
Individuelle Anpassungen vornehmen
Diese kleine Routine können Sie mit geringen Änderungen direkt in Ihre Datenbanken bzw. Formulare übernehmen. Ändern Sie dazu den Namen der abzufragenden Tabelle und des betreffenden Feldes sowie die Namen der Variablen in den folgenden Zeilen. Die vorzunehmenden Änderungen sind jeweils in rot dargestellt:
Dim strNachname
strNachname = Me.Nachname
strSQL = „select * from Kunden where Nachname = ‚“ & strNachname & „‚“
strMsg = strMsg & rs(„Nachname„) & „, “ & rs(„Vorname„) & “ in “ & rs(„Ort„) & vbCrLf
Wenn Sie beispielsweise in einer Artikelverwaltung die Artikelbezeichnung überprüfen möchten, könnten die Anpassungen wie folgt aussehen:
Dim strArtBezeichnung
strArtBezeichnung = Me.ArtBezeichnung
strSQL = „select * from Artikel where ArtBezeichnung = ‚“ & strArtBezeichnung & „‚“
strMsg = strMsg & rs („ArtBezeichnung„) & „, “ & rs(„ArtNummer„) & “ in “ & rs(„ArtPreis„) & vbCrLf
Hier würden dann alle Datensätze zur Artikelbezeichnung mit ihrer Artikelnummer und ihrem Preis als Anhaltspunkt angezeigt werden.