2016-07-12 13 views
0

Dies ist eine Fortsetzung von einem früheren Post von mir: How to select a printer for entire job?, wo ich im Grunde eine Reihe von Berichten aus einem Formular in meiner Access-Datenbank drucken möchte.Wie Verweis auf Combobox übergeben?

dem aus auf diese Hilfe doc verweist: https://msdn.microsoft.com/en-us/library/ee336132(v=office.12).aspx

Ich versuche, die Combobox mit aktiven Drucker darin zu schaffen, um vorübergehend den Standarddrucker für eine Reihe von Dokumenten zu ändern. Ich stolpere darüber, wo es heißt, "einen Verweis auf ein ComboBox-Steuerelement zu übergeben" ... Wie implementiert man das?

Hier ist der Code, den ich bisher habe, wo cboPrinterSelect der Combobox Name:

Private Sub cboPrinterSelect_Load(Cancel As Integer) 
    Call GetPrinterList 
    ' I'm not sure about this next part either' 
    cboPrinterSelect.Value = GetPrinterList.value 
End Sub 

'*************************************************** 
Private Sub cboPrinterSelect_AfterUpdate(Cancel As Integer) 
    Set Application.Printer = Application.Printers(cboPrinterSelect.ListIndex) 
End Sub 
'*************************************************** 

Private Sub GetPrinterList(ctl As Control) 
    Dim prt As Printer 
    For Each prt In Printers 
     ctl.AddItem prt.DeviceName 
    Next prt 
    ctl = Application.Printer.DeviceName  
End Sub 

Jede Hilfe/Rat würde geschätzt.

EDIT:

Hier ist meine aktualisierte Code, der noch einen Fehler wirft (in Andre Kommentare beschrieben):

Private Sub Form_Load() 
    Call GetPrinterList(Me.cboPrinterSelect) 
End Sub 

'********************************************************* 

Private Sub cboPrinterSelect_AfterUpdate(Cancel As Integer) 

Set Application.Printer = Application.Printers(cboPrinterSelect.ListIndex) 

End Sub 

'*************************************************************** 

Private Sub GetPrinterList(ctl As Control) 

Dim prt As Printer 
For Each prt In Printers 
    ctl.AddItem prt.DeviceName 
Next prt 
ctl = Application.Printer.DeviceName 

End Sub 
+0

cboPrinterSelect ist dies auch der Name des Formulars? –

+0

Sie haben 'Private Sub GetPrinterList (ctl als Kontrolle)', aber Sie übergeben kein Steuerelement an es, wenn Sie es aufrufen, 'Call GetPrinterList'. Sie müssen 'Call GetPrinterList (Ihr_Steuerungsname)' hinzufügen –

+0

Der Name des Formulars lautet "_Print Series", cboPrinterSelect ist nur der Name der Combobox. @Shairado, könntest du ein Beispiel von dem, was du meinst, posten? – cdomination

Antwort

1

Der erste Teil, der Anruf von GetPrinterList() muss gehen in das On Load Ereignis der Form.

Private Sub Form_Load() 
    Call GetPrinterList(Me.cboPrinterSelect) 
End Sub 

Das sollte alles sein, was fehlt.

Der Standarddrucker von dieser Linie vorgewählten ist:

ctl = Application.Printer.DeviceName 

Und stellen Sie sicher, dass cboPrinterSelect ein RowSourceType von Werteliste hat.

+0

Ich erhalte immer einen Fehler "Prozedurdeklaration stimmt nicht mit der Beschreibung des Ereignisses oder der Prozedur überein, die denselben Namen hat", wenn ich mein Formular öffne. – cdomination

+0

Entfernen Sie Ihre 'cboPrinterSelect_Load()'. Wenn das nicht hilft, aktualisieren Sie Ihre Frage mit Ihrem aktuellen Code. – Andre

+0

Ich habe gerade meinen bearbeiteten Code gepostet, danke für Ihre Hilfe – cdomination

1

Probieren Sie den folgenden Code, es werden alle angeschlossenen Drucker in der Combo_box in Ihrem User_Form angezeigt.

Public Sub GetPrinters() 

    ' Use a large array (supports up to 100 printers). 
    ReDim result(100) As String 
    Dim wshNetwork, allPrinters As Object 

    ' Get the network object 
    Set wshNetwork = CreateObject("WScript.Network") 
    Set allPrinters = wshNetwork.EnumPrinterConnections 

    ' Printers collection has two elements for each printer. 
    For i = 0 To allPrinters.Count - 1 Step 2 
     Print_Series.cboPrinterSelect.AddItem allPrinters.Item(i + 1) 
    Next 

    ' call your user form and combo box will have all active printers 
    Print_Series.Show 

End Sub 
+0

Ist das alles, was ich brauche oder muss ich Teile des Codes, den ich bereits habe, speichern? – cdomination

+0

@cdomination hast du es ausgeführt? Hast du alle Drucker in deiner Combo Box bekommen? Ich habe Ihre Variablennamen im Code –

+0

verwendet. Dies ist ein Access-Formular, kein Benutzerformular. Und Access verfügt über die 'Application.Printers'-Sammlung, die nicht neu erstellt werden muss. – Andre