マイクロソフトデータベースアクセス(Access)で開発していると、ちょっとしたことを忘れて調べるのに時間を要する事があるます。このTipsでは、本当に簡単な事なのですが、短時間で調べられるように備忘録にしています。
今回は、何かと単純なのですが、テキスト開いてまではメンドクサイ簡単な事です。
VBAでフォーム開閉
VBAで処理をしていると、処理と同時にフォームを閉じて別のホームを開けたいという事がでてきます。
●フォームを開ける
DoCmd.OpenForm "開けたいホーム名", acNormal, , , acFormEdit , acWindowNormal
●フォームを閉じる
DoCmd.Close acForm, "閉じたいフォーム名", acSaveNo
簡単な事なのですが、このコマンドを覚えておくことは難しいですね。
コマンドボタンを用途で表示・非表示
上の図のように、「商品新規登録」「商品修正」という2つのボタンがあります。
このフォームは、新規登録もできるが、編集もできるように考えたものです。
その使用用途から、新規登録の場合は、「商品新規登録」ボタンだけ表示されていればよく、「商品修正」のボタンは非表示で良い。
逆に、修正の場合は、逆になる。
設計上、新規の場合は、NO(自動採番)が未入力状態になっているので、このテキストボックスの内容によって表示の切り替えをしてみたいと思います。
このフォームが開いたときに、NO(自動採番)のテキストボックスが空(Null)なら、「商品修正」ボタンを非表示にしたいと思います。
[php] Private Sub Form_Load() If IsNull(edit_no) Then edit_btn.Visible = False Else edit_btn.Visible = True End If End Sub [/php]
上記の方法で見事にボタンの表示、非表示設定が可能になりました。
ログインの違いでボタンを表示・非表示切替
まず、
ココがポイント
標準モジュールから、フォームが変わっても引き継げる変数を設定
します。
Public trans_no As String
という感じで、trans_noに入る変数がフォームが違っても引き継げるようにしました。
ログインフォームが閉じる時に、trans_noに数字を設定します。
その数値によってボタンの表示・非表示を決めたいと思います。
パスワードを入力後の更新処理にて、VBAにてtrans_noの数値を変えました。
[php] Private Sub login_AfterUpdate() If login = "パスワード1" Then trans_no = 0 DoCmd.Close acForm, "login", acSaveNo DoCmd.OpenForm "menu", acNormal, , , acFormEdit, acWindowNormal Else If login = "パスワード2" Then trans_no = 1 DoCmd.Close acForm, "login", acSaveNo DoCmd.OpenForm "menu", acNormal, , , acFormEdit, acWindowNormal Else MsgBox ("一致するパスワードがありません。") login = Null Me.終了.SetFocus Me.login.SetFocus Exit Sub End If End If End Sub [/php]
そして、別ホーム(上の例では、menu)が開いたときに、下記のようなVBAを動かせば、ボタンが表示・非表示の選択ができます。
[php] Private Sub Form_Load() If trans_no = 0 Then edit_btn.Visible = False edit_btn2.Visible = True Else edit_btn.Visible = True edit_btn2.Visible = False End If End Sub [/php]