How to pass reference to combobox?

瘦欲@ 提交于 2020-01-07 02:06:22

问题


This is a continuation from a previous post of mine: How to select a printer for entire job?, where I basically want to print a series of reports from a form in my Access database.

Which refers to this help doc: https://msdn.microsoft.com/en-us/library/ee336132(v=office.12).aspx

I'm trying to create the combobox with active printers in it in order to temporarily change the default printer for a series of documents. I'm tripped up on where it says "pass a reference to a ComboBox control"... How does one implement this?

Here's the code I have so far, where cboPrinterSelect is the 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

Any help/advice would be appreciated.

EDIT:

Here is my updated code, which is still throwing an error (described in Andre's comments):

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

回答1:


The first part, the call of GetPrinterList(), must go into the On Load event of the form.

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

That should be all that's missing.

The default printer is pre-selected by this line:

ctl = Application.Printer.DeviceName

And make sure that cboPrinterSelect has a RowSourceType of Value List.




回答2:


Try the following code, it will display all connected Printers in the combo_box in your User_Form.

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


来源:https://stackoverflow.com/questions/38330111/how-to-pass-reference-to-combobox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!