Microsoft Access Club >Access裏技Tips >このページ >次頁 < 前項 サイト内検索


休暇申請書をリストボックスから選択して印刷する : Access裏技Tips



休暇取得は、事前に休暇申請書を上司へ提出する必要があります。 ここでは、リストボックスから社員を選択し複数の申請日を一枚の休暇申請書にまとめて印字する技を紹介します。

リストボックスから選択し印刷する

  1. サンプルテーブル(tbl_sample)をもとにして、「休暇申請書」のレポート(rpt_sample)を作成します。
  2. ページヘッダー、フッターを作成します。
  3. フォームを作成し、詳細セクションにリストボックスを2個(リスト、リスト2)と印刷を行うコマンドボタン(Cmdコマンド)を配置します。
  4. 社員名を選択するリストボックス(リスト)から、その社員の休暇申請状況を別のリストボックス(リスト2)に一覧表示します。
  5. リスト2で選択されたIDのみコマンドボタンから印刷を行います。

「休暇申請書」のレポート作成

  1. 「休暇申請書」のレポートを作成します。
  2. サンプルデータを元に休暇申請書を作成します。

「休暇申請書印刷」のフォーム作成

  1. 「休暇申請書印刷」のフォームを作成します。
  2. 非連結のフォームを作成します。
  3. 印刷を行うコマンドボタンを作成します。
  4. リストボックスを左右に計2個作成します。



上段:左側リストボックス値集合ソース図

下段:右側リストボックス値集合ソース図

左側(リスト)のリストボックスの更新後処理イベントプロシージャの作成

左側(リスト)のリストボックスの更新後処理イベントプロシージャを作成する

Private Sub リスト_AfterUpdate()

    Me.リスト2.Requery ' --- A

End Sub
解説
  1. 右側のリストボックスを再クエリーします。
左側のリストボックスのプロパティ
列数    :  2
列幅    :  0cm;3cm
連結列  :  1
右側のリストボックスのプロパティ
列数    :  4
列幅    :  0cm;1.501cm;4.3cm;2.2cm
連結列  :  1

コマンドボタンクリック時イベントプロシージャの作成

コマンドボタンクリック時イベントプロシージャを作成する。

Private Sub Cmdコマンド_Click()

    Dim Var条件 As Variant
    Dim Var行 As Variant
    Dim strmsgA As String
    Dim strmsgB As String

    Var条件 = Null

    For Each Var行 In Me.リスト2.ItemsSelected ' --- A
        Var条件 = Var条件 & IIf(Not IsNull(Var条件), ",", "") & _ ' --- B
        Me.リスト2.Column(0, Var行) ' --- C
    Next

    strmsgA = "対象項目が何も選択されていませんので、印刷を中止します。" & _
               Chr(13) & "再度操作を行って下さい。"
    strmsgB = "申請者 : " & Me.リスト.Column(1) & Chr(13) & _
              "申請ID : " & Var条件 & Chr(13) & Chr(13) & _ ' --- D
              "上記申請事項で印刷を開始します。"

    Select Case IsNull(Var条件) ' --- E
        Case True
            MsgBox strmsgA, 16
        Case False
            If 1 = MsgBox(strmsgB, 1) Then
                DoCmd.OpenReport "rpt_sample", acViewPreview, "", _
                "ID in (" & Var条件 & ")" ' --- E
            End If
    End Select
    
End Sub
解説
  1. For Each...Next ステートメントは、指定された回数を繰り返し実行するステートメントです。Me.リスト2.ItemsSelectedは、リスト2のリストボックスで選択している項目を指します。
    よって、指定された項目の回数だけ、そのリストボックスの列に対して以下の処理を行います。
  2. IIF関数を用いてNot IsNull(Var条件)が、真(True)であればコンマ(,)を、偽であれば空白("")を返します。
  3. Columnプロパティで、リスト2のリストボックスで選択した値を取得します。
  4. Chr関数の引数に13を代入すると、改行を行います。
  5. IsNull(Var条件)は、Var条件がNullであるば場合はTrueを、NullでなければFalseを返します。
  6. レポートrpt_sampleを開く時、OpenReportメソッドのWhere条件を設定しています。条件式にはIn句を用いて該当するIDを並べています。

今回のおすすめポイント

IIF 関数

IIf(式, 真の式, 偽の式)
式の評価が真であれば真の式、偽であれば偽の式を返します。VBAやマクロで利用が可能です。

&(アンバサダ)

文字列の結合演算子です。
プロシージャの一行が長くなってくると見難いですから、この場合は & と半角の空白、そして_(アンダースコア)を用いて複数行に分けます。

動作確認

  1. 「休暇申請書印刷」のフォームをフォームビューで開きます。
  2. 左側のリストボックスから社員を選択し、右側のリストボックスから申請IDを複数選択します。

  1. コマンドボタンをクリックすると、確認メッセージを表示します。

  1. 申請書の印刷プレビューを表示します。


関連ページ

ページの先頭へ 前ページへ戻る

 


休暇申請書をリストボックスから選択して印刷する : Access裏技Tips


 

-Microsoft Access Club-

アメリカ合衆国の大手データセンターのアダルト対応可能なリーズナブル価格設定の専用・共有レンタルサーバーをご提供しています。
アメリカ合衆国の大手データセンターにサーバー機器を設置。
アダルト対応可能な専用・共有レンタルサーバーを提供。