たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_フォームの操作その7_フォームの起動時に処理を行う【Load】

フォームの読み込み時に発生するイベントに処理を記述、当記事ではプリンタ選択フォームを作成

イベント【Load】とは

フォームが読み込まれる際に発生するイベント
実際はLoadイベントだけではなく、Open→Load→Activeの順でイベントが発生する
※キャンセルができるのはOpenイベントのみ
※アクティブになったウィンドウにActiveイベントが発生

起動時に必要な処理はLoadに記述し実行させる

使えるプリンタの一覧をリストに表示

規定のプリンタは以下のように記述して表すことができる

Application.Printer

規定のプリンタはというと、以下のように記述する

Application.Printer.DeviceName

フォームの起動とともに、フォーム内に設置したリスト「lst1」に、使用できるプリンタ一覧を出すには
Loadイベントモジュール内に、以下のように記述

▼記述例▼

Private Sub Form_Load()
 Dim PList As Object
  For Each PList In Application.Printers '「s」がつくことに注意
   Me.lst1.AddItem PList.DeviceName
  Next
 Me.lst1.value = Application.Printer.DeviceName '規定のプリンタにフォーカス


▼ここまでの処理結果▼



ボタンを押下~印刷実行まで

次に、「印刷」ボタンを押したら印刷するかどうかを聞くメッセージを表示し、「はい」の押下で印刷を行うよう記述

▼記述例▼

Private Sub btn1_Click()
    Dim MyPrinter As Object
    If MsgBox("選択されたプリンタで印刷しますか?", vbYesNo) = vbYes Then
        Set MyPrinter = Application.Printer '既定のプリンタを「MyPrinter」に格納しておく
        Set Application.Printer = Application.Printers(Me.lst1.Value) '選んだプリンタを規定のものとする
        DoCmd.SelectObject acReport, "月間売上表"
        DoCmd.PrintOut acPages , 1 , 2 , adHigh , 5 , True '2ページ目までを5部、部単位で印刷
        Set Application.Printer = MyPrinter '既定を元のプリンタに戻す
        Set MyPrinter = Nothing 'リセット
    End If
End Sub


▼メッセージボックス表示までの処理結果▼




リストに表示されている通り、紙を印刷するプリンタ機器は家にない(「Fax」て出たけどなんだろ…)