Microsoft Access Club >SampleFile Q & A >インデックス >このページ >次頁 < 前項  サイト内検索


Q&A-017 ユーザー別にレポートを出力する方法



タイトル : 連続データの処理
記事No : 8056
投稿日 : 2003/06/03(Tue) 00:58
投稿者 : kazu <shino-bk@spn1.speednet.ne.jp>

OS:WIN.ME
Access Version:2000
ACCESSで連続データをフォームから入力し、「OK」ボタンで作成したデータを一度に印刷したいと言う趣旨のソフトを作成しています。
一応、上記の趣旨に沿うものは出来たのですが、複数のメンバーで使用するとなると話が別になってしまいます。
Aさんが作成した5件のデータもBさんが作成したデータも、どちらかが実行ボタンを押すと、両方印字されてしまいます。

通常「1レコード1画面」ですが「複数レコード1画面」の場合、直前までのデータはテーブル上確定しておりABのどちらが実行ボタンをおしても、それまで両者で作成していたレコードが全て印刷されてしまいます。
フォーム上チェックボタンをつけても、両者が同じようにチェックボタンを作成しているので、これまたテーブル上は見分けがつかず全て印刷されてしまいます。

作成者ごとにコードNOを割り当て他のものと区別する事は可能ですが、そうなるとクエリ・レポートを使用者分作らなければならず悩んでいます。
上記の、連続データの一括処理についてお分かりの方は、お力を貸してください。


> Aさんが作成した5件のデータもBさんが作成したデータも、どちらかが実行ボタンを押すと、両方印字されてしまいます

Lan上で複数のユーザーが同じテーブルに書き込みをしているんですね。そして、実現したいことは、ユーザー別に入力済みのデータをレポート出力することでしょうか?

この考え方でいきますと、

  • 1レコードの新規書き込み、及び修正時に、ユーザー別にフラグを立てる。
  • レポート出力は、入力フォーム上から行う。

であれば、簡単なんですが・・。一応、参考にして下さい。

 

テーブルデータは下記のようなものを想定します。

 

 

入力フォームは下記のように想定しています。

 

 

この入力フォームは、下記の特徴があります。

  • 非連結テキストボックス(txt入力者表示)があります。

  • "隠しテキストボックス"(txt入力者書込み)もあります。

考え方は下記のとおりです。

  1. フォームを開く時に、ユーザーは氏名を入力します。

  2. その入力値を「txt入力者表示」テキストボックスに格納します。

  3. 最後の入力となる「日付」テキストボックスの 更新後処理イベント を利用して、

 

Private Sub txt日付_AfterUpdate()

    Me.txt入力者書込み.Value = Me.txt入力者表示.Value

End Sub

 

  1. 連結テキストボックス「txt入力者書込み」にデータを書き込みます。

  2. これで、1レコードごとに入力者が特定できることになります。

 

テーブルデータは下記のようになります。

 

ID 日付 入力者
1 2003/06/02 佐々木
2 2003/05/25 佐々木
3 2003/05/29 松永
4 2003/05/29 田中
6 2003/06/02 松永
7 2003/06/01 松永
8 2003/06/03 田中

 

レポートのレコードソースにクエリを配置し、下記のようにユーザーを特定すると限定したレポートを出力することができるようになります。

 

 

■ユーザー名はフォームの開く時イベントに下記のように記述します。InputBox関数を用いています。

Private Sub Form_Open(Cancel As Integer)

    Dim Textname As TextBox
    Dim strmsg As String
    Dim varname As Variant
    
    Set Textname = Me.txt入力者表示
    strmsg = "入力者氏名を入力して下さい"
    varname = InputBox(strmsg)
    
    '入力なき時は、フォームオープンをキャンセルします。
    If varname = "" Then
        Cancel = True
    End If
    
    Textname = varname

End Sub

 

■印刷を行うプロシージャは下記のとおりです。

Private Sub com印刷_Click()

On Error GoTo err

    DoCmd.OpenReport "rpt_main", acViewPreview, "", "", acNormal
    
    Exit Sub
    
err:

    '空データの時、印刷をキャンセルした場合に発生。
    If err.Number = 2501 Then
        End  '何もなく終了。
    Else
        msgbox "エラーナンバー:" & err.Number & vbNewLine & _
                "エラー内容:" & err.Description, 16, "管理者"
    End If

End Sub

 

 

2003/06/04


Q&A-017 ユーザー別にレポートを出力する方法


 

-Microsoft Access Club-