[三流君] −−> [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でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.066を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・