2016-07-12 16 views
0

これは私の以前の投稿の続きです:How to select a printer for entire job?、私は基本的に私のAccessデータベースのフォームから一連のレポートを印刷したいと思っています。このヘルプドキュメントを参照コンボボックスへの参照を渡すには?

https://msdn.microsoft.com/en-us/library/ee336132(v=office.12).aspx

私は一時的に一連の文書のデフォルトのプリンタを変更するためには、それに積極的にプリンタとのコンボボックスを作成しようとしています。私はそれが "ComboBoxコントロールへの参照を渡す"と言うところでトリップしました...これはどのように実装されますか?

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 

すべてのヘルプ/アドバイスをいただければ幸いです。cboPrinterSelectは、コンボボックスの名前です

はここで、これまでのところ私が持っているコードです。

EDIT:ここ

はまだエラーを投げている私の更新されたコードは、(アンドレのコメントで説明される):

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はこれもフォームの名前ですか? –

+0

あなたは 'Private Sub GetPrinterList(ctl As Control)'を持っていますが、 'Call GetPrinterList'を呼び出すときにコントロールを渡していません。 'Call GetPrinterList(your_control_name)'を追加する必要があります –

+0

フォームの名前は "_Print Series"、cboPrinterSelectはコンボボックスの名前だけです。 @ ShaiRado、あなたが意味するものの例を投稿できますか? – cdomination

答えて

1

最初の部分、GetPrinterList()の呼び出し、に行かなければなりませんOn Loadイベントのフォームはです。

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

これはすべて欠けているはずです。

デフォルトのプリンタは、このラインで事前に選択され:

ctl = Application.Printer.DeviceName 

そしてcboPrinterSelectが値リストの値集合タイプを持っていることを確認してください。

+0

フォームを開くたびに「プロシージャ宣言が同じ名前のイベントまたはプロシージャの説明と一致しません」というエラーが表示されます。 – cdomination

+0

あなたの 'cboPrinterSelect_Load()'を削除してください。それでも問題が解決しない場合は、現在のコードで質問を更新してください。 – Andre

+0

編集したコードを投稿しました。ありがとうございました。 – cdomination

1

次のコードを試すと、接続されているすべてのプリンタがUser_Formのcombo_boxに表示されます。

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

これは私が必要とするものか、すでに持っているコードの一部を保存する必要があるのですか? – cdomination

+0

@cdominationあなたはそれを実行しましたか?コンボボックスにすべてのプリンタをインストールしましたか?コード内で変数名を使用しました –

+0

これはアクセスフォームであり、ユーザーフォームではありません。 Accessには 'Application.Printers'コレクションがあり、再作成する必要はありません。 – Andre

関連する問題