2016-07-11 6 views
0

Ich habe derzeit eine Access 2003-Datenbank, die über ein Formular zum Drucken einer Reihe von Berichten basierend auf dem Job, den der Benutzer auswählt, verfügt. Die Abfrage befindet sich ebenfalls im VBA-Code, der die katalogisierten Teile des Jobs betrachtet und deren entsprechende Berichte öffnet.Wie wähle ich einen Drucker für den gesamten Job aus?

Hier ist der Code, der so tut, richtig:

Private Sub Print_Report_Click() 

Dim default_cat As Dao.Database 
Dim d As Dao.Recordset 
Dim q As String 


Set default_cat = CurrentDb 
q = "SELECT DISTINCT CATALOG, USER3 FROM [_MASTER_UPLOAD] WHERE SerialNumber='" & Me.[SerialNumberSelection] & "'" 
Set d = default_cat.OpenRecordset(q, dbOpenDynaset) 
d.MoveFirst 

DoCmd.RunCommand acCmdPrint 

Do While Not d.EOF 


Select Case d!USER3 

    Case "COM" 
    DoCmd.OpenReport "RPTCompressor", , , "CATALOG = '" & d!CATALOG & "'" 

    Case "CON" 
    DoCmd.OpenReport "RPTCondenser", , , "CATALOG = '" & d!CATALOG & "'" 

    Case "CRV" 
    DoCmd.OpenReport "RPTCapacityRegValve", , , "CATALOG = '" & d!CATALOG & "'" 

    Case "CV" 
    DoCmd.OpenReport "RPTCheckValve", , , "CATALOG = '" & d!CATALOG & "'" 

    Case "etc..." 

End Select 

d.MoveNext 

Loop 

d.Close 

End Sub 

Grundsätzlich jetzt, wo mein Problem liegt in der Druckerauswahl ist DoCmd.RunCommand acCmdPrint. Das Popup-Fenster erscheint und ich kann den gewünschten Drucker auswählen, aber diese Auswahl scheint nur den ersten Bericht der Gruppe zu beeinflussen (alle anderen gehen zum Standarddrucker des Computers). Höchstwahrscheinlich drucke ich die Berichte von unserem Druckereidrucker aus oder wandle sie einfach in PDFs um, aber das bedeutet auch, dass ich sie nicht fest codieren kann, um immer an einen bestimmten Ort zu drucken.

Wie kann ich sicherstellen, dass meine Druckerauswahl für alle Berichte gültig bleibt, vorzugsweise ohne den Befehl acCmdPrint für jeden einzelnen Bericht in derselben Gruppe ausführen zu müssen?

Vielen Dank im Voraus.

EDIT

Diese Frage angegeben ist und fortgesetzt hier: How to pass reference to combobox?

Antwort

1

Vom ersten Ergebnis access vba select printer googeln (nur sagen):

Der einfachste Weg, wenn Ihre Berichte werden auf Drucken auf dem Standarddrucker, ist vorübergehend den Standarddrucker zu ändern:

Set Application.Printer = Application.Printers("myPrinterDeviceName") 
DoCmd.OpenReport "FirstReport" 
DoCmd.OpenReport "SecondReport" 
' ... 
Set Application.Printer = Nothing 

Wenn nicht, können Sie es pro Bericht tun:

DoCmd.OpenReport "FirstReport", View:=acPreview, WindowMode:=acHidden 
Set Reports("FirstReport").Printer = Application.Printers("myPrinterDeviceName") 
DoCmd.OpenReport "FirstReport", View:=acViewNormal 

Die verlinkte Seite hat auch ein Beispiel dafür, wie für die Auswahl einer Liste der verfügbaren Drucker zu präsentieren.

+0

Das Problem bei den ersten beiden Optionen, die Sie aufgelistet haben, ist, dass Sie den Druckernamen hart codiert haben. Ich kann nicht immer auf demselben Drucker drucken, auch die Anzahl der Berichte hängt vom Job ab. Wie gesagt, mit 'DoCmd.RunCommand acCmdPrint' bekomme ich eine Liste meiner Drucker und kann einen auswählen, aber dieser Drucker ist nur für den ersten Bericht aktiv. Die nächsten Berichte werden an den Standarddrucker gesendet. – cdomination

+0

Das war nur ein Beispiel für die Einfachheit. Fügen Sie anstelle von "DoCmd.RunCommand acCmdPrint" dem Formular eine Dropdown-Box "Drucker auswählen" hinzu, wie auf der MSDN-Seite angezeigt. Dies ist der Name des Druckergeräts, den Sie verwenden. Sie müssen diese Methoden an Ihre Bedürfnisse anpassen, ich hatte nicht vor, fertigen Code für Ihre genaue Situation zu schreiben. – Andre

+0

Um meine Frage zu beantworten, kann ich meinen Standarddrucker nicht vorübergehend auf den Drucker setzen, den ich mit "DoCmd.RunCommand acCmdPrint" ausgewählt habe. – cdomination