[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.066 Access ユーザーマスターのチェックとメニュー切り替え

Access ユーザーマスターのチェックとメニュー切り替え

メルマガ発行内容

<Access ユーザーマスターのチェックとメニュー切り替え>

こんにちは、三流プログラマーKen3です。 今回から少し、 Access で ユーザーのローカル管理 ・ユーザー選択画面 ・データ入力 ・データ印刷 を書いてみたと思います。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba066.lzh にdb066-97.mdbが保存されています。 (Access97形式、2000の人は変換してね) マスターテーブルにデータを追加して、遊んでみてください。

/* * 1.今回のキッカケ */

In message "有難うございました", 前* **さん wrote... >すみませんが、現在アクセス VBA関係で直面している問題がありますのでまた質問 >させていただきたいのですが > >私の希望は、アクセスの画面を開いたときに、フォームが出てオペレーターは入力の >み、パスワードを持つ担当者が、検索、修正ができるようにしたいと思っています > >その場合、オペレーターに自分が入力したデータだけを打ち出させて、目検してもら >いたいのですがその日、自分が入力したデータだけを打ち出すことができるでしょう >か ---- 質問来てからの日数が経っているので、もう解決してしまったと思うが、 ネタ的に使えそうなので、使ってみたいと思います。

/* * 2.客先で要望を聞く */

まぁ、普通のシステム作成だと要望を聞いて、仕様書を作成します。 とある入力センターに打ち合わせに向かいました。 ※作り話だよ 客先担当者のお話 >私の希望は、アクセスの画面を開いたときに、フォームが出てオペレーターは入力の >み、パスワードを持つ担当者が、検索、修正ができるようにしたいと思っています > >その場合、オペレーターに自分が入力したデータだけを打ち出させて、目検してもら >いたいのですがその日、自分が入力したデータだけを打ち出すことができるでしょう >か --- 三流プログラマーKen3 まずは、管理者とオペレーターで使える機能に制限を持たせたいんですね。 管理者の機能は ・ユーザーマスターのメンテナンス ・検索と修正機能 ・納品用の印刷や納品用CSV作成などの出力機能 オペレーターの機能は ・データの入力機能 ・入力データの目検用の印刷機能 共通機能は、 ・ログイン画面 ラフですが、こんな感じでいいですか? あの〜、何を言っているのか?サッパリなんですが?イメージが沸かなくて。 そうですよね(苦笑しながら)、 では、次回の打ち合わせの時、案を作って持ってきます、 あっ、その時までに入力するデータの項目とサイズを教えてもらえませんか? あと、差し障りが無ければ実際に入力する伝票を次回お借りしたいです。 それと、 えっ、まだあるの? できたら集計印刷のイメージを教えてもらえると助かります。 次回の打ち合わせに 私が用意するもの ・システム化の案 ・概算見積もり お客様に用意してもらうもの ・入力データの項目とサイズ、実際に使用している伝票 ・集計印刷のイメージとレイアウトはラフな手書き

/* * 3.要望を仕様書に落す */

画面の遷移図を作成する ~~~~~~~~~~~~~~~~~~~~~~ まぁ、1機能1画面だから機能一覧と似ちゃうけど Windoes起動   ↓ xxxx.mdb をダブルクリックして起動する ログイン画面の表示 |   +----- 終了ボタン Accessの終了 | +----- ログインボタン データチェック後、       管理者メニュー       オペレータメニュー       どちらかのメニューを表示する 管理者メニュー | +----- マスターメンテナンス マスターメンテ画面を起動 | +----- 管理帳票印刷 管理帳票印刷画面へ | +----- CSV納品ファイルの作成 納品ファイル作成画面へ | +----- 作業終了  管理者メニューを閉じてログイン画面へ オペレータメニュー   | +----- データ入力 データ入力画面の表示 | +----- 目検 入力データを印刷する | +----- 作業終了  オペレータメニューを閉じてログイン画面へ テーブル(ファイル)フォーマット ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MST_USER ユーザーマスターテーブル F_USER_ID Text(10) 10文字まで、GusetやA001などのコード 重複不可 F_NAME Text(20) ユーザーの名前 小林君や遠藤君 F_PASS Text(20) パスワード F_KUBUN True/False True管理者、False一般オペレータ T_DATA 入力データ管理テーブル F_NO オートナンバー   ・   ・  客先から後で聞く   ・ F_INPUT text(文字型)  入力したユーザーのID 画面レイアウト ~~~~~~~~~~~~~~ ログイン画面 F_LOGIN USER [ ________ ] ▼ コンボボックスで選択 PassWord [ ********** ] ┌────┐ │ログイン│ └────┘ ┌──────┐ │システム終了│ └──────┘ ユーザーを選択、パスワード入力後、ログインボタンを押してください。 管理者メニュー画面 F_MENU_KANRI ┌────────┐ │ マスターメンテ │ └────────┘ ┌────────┐ │ 管理帳票印刷 │ └────────┘ ┌────────┐ │納品ファイル作成│ └────────┘ ┌────────┐ │ 終 了 │ └────────┘ オペレータメニュー画面 F_MENU_OP ┌─────┐ │ 入 力 │ └─────┘ ┌─────┐ │目検用印刷│ └─────┘ ┌─────┐ │ 終 了 │ └─────┘ 印刷(帳票)レイアウト ~~~~~~~~~~~~~~~~~~~~~~ イメージを貰っていないのでまだ。 まぁ、ラフに書いて、打ち合わせ後に修正するか。

/* * 4.ログイン画面の作成 */

時間あるし、ログイン画面でも作成して持って行くか。 ログイン画面 F_LOGIN USER [ Ken3______ ] ▼ コンボボックスで選択 PassWord [ ********** ] ┌────┐ │ログイン│ └────┘ ┌──────┐ │システム終了│ └──────┘ イベント動作仕様(操作に対応する処理) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 初期処理 ・・・ 画面が開いたら項目を初期値に(空白にする) ログインボタンが押されたら MST_USER ユーザーマスターテーブルを検索して、 入力されたパスワードとテーブルのF_PASSが一致するかチェック。  ア.エラーの時、エラーメッセージ表示  イ.一致(正常の時)    F_KUBUNを判断し、フォームを開く    F_KUBUN = True 管理者メニュー画面 F_MENU_KANRIを開く F_KUBUN = False オペレータメニュー画面 F_MENU_OPを開く システム終了ボタンが押されたら Accessを終了させる まずは、テーブルを作ってと、 次はフォームを作成します。 ポイントはUSERIDを入れるコンボボックスです。 クエリーを1つ作り(Q_USER)値集合ソースに指定、 列幅を4cm;0cm;0cm;0cmとして、 ^^^^^^^^^^^^^^^^^^^^^ 頭のF_USER_IDのみ表示させてます。 *F_NAME, F_PASS, F_KUBUN は見せないけど値は取りたかったので。 次は、ログインボタンを押された時の処理を記述します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Private Sub btnLOGIN_Click()

    'パスワードが合っているかチェックする
    If Me![PASS] <> Me![USER_ID].Column(2) Then  'コンボボックスの3列目
        MsgBox "パスワードが違います、確認して下さい"
        Me![PASS] = ""      '元の文字を消す
        Me![PASS].SetFocus  'フォーカスを移動する
        Exit Sub  '途中で処理を抜ける
    End If

    '管理者とオペレータを判断してフォームを開く
    Dim stLinkCriteria As String
    If Me![USER_ID].Column(3) = True Then  'コンボボックスの4列目
        DoCmd.OpenForm "F_MENU_K"  '管理者用
    Else
        DoCmd.OpenForm "F_MENU_OP" 'オペレータ用
    End If

End Sub
前半でパスワードのチェックを行ってます。 ポイントは、コンボボックスの Me![USER_ID].Column(2) です。 複数列から構成されているコンボボックスで、 .Column(0) (1)...と選択されている列を取出すことが出来ます。 ※0から始まっているのに注意して使ってみてください。 If Me![PASS] <> Me![USER_ID].Column(2) Then で入力されたパスワードが合っているかチェックして <>の違う時に、 MsgBox "パスワードが違います、確認して下さい" Me![PASS] = "" '元の文字を消す Me![PASS].SetFocus 'フォーカスを移動する Exit Sub '途中で処理を抜ける とメッセージ表示、フォーカスをパスワードにあて、関数を抜けてます。 パスワードのチェックがOKだったら、 次は開くフォームをF_KUBUNの値で切り替えます。 ここもコンボボックスでF_KUBUNが4列目のデータとして取出せるので、 If Me![USER_ID].Column(3) = True Then でチェックして、 DoCmd.OpenForm "F_MENU_K" '管理者用 と DoCmd.OpenForm "F_MENU_OP" 'オペレータ用 を切り替えて表示してます。 最後は、Accessの終了処理 ~~~~~~~~~~~~~~~~~~~~~~~~
Private Sub btnCLOSE_Click()
    '終了の確認
    If MsgBox("終了しますか?", vbYesNo) = vbYes Then
         DoCmd.Quit
    End If
End Sub
と、 DoCmdの.Quitメソッドで終了してます。 長かったけど、パスワードのチェック画面ができました。 ※手抜きだけどね。 ※慣れないうちは、コマンドボタンウィザードを使って、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DoCmdを探る場合、コマンドボタンのウィザードを使うといいですよ。 開くのコマンドはこんな感じで作ってくれます
Private Sub コマンド9_Click()
On Error GoTo Err_コマンド9_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "F_MEMU_K"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_コマンド9_Click:
    Exit Sub

Err_コマンド9_Click:
    MsgBox Err.Description
    Resume Exit_コマンド9_Click
    
End Sub
同じくアプリケーション終了も作ることができます(調べることができます)

/* * 5.おわりの挨拶 */

今回は、長かったけど、 ・要求を聞いて、仕様を作成して行く ・ログイン画面の作成 でした。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba066.lzh にdb066-97.mdbが保存されています。 (Access97形式、2000の人は変換してね) マスターテーブルにデータを追加して、遊んでみてください。 次回はたぶん、続きの入力関係でログインしたユーザー単位の管理です。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]