#694 | フォームを開く際にサブフォームの編集権限を切り替えるには? | フォーム、VBA | |
フォームには、データの編集可否に関連した次のようなプロパティがあります。
フォームを開く際に、これらをVBAのプログラムで動的に設定することで、条件に応じたさまざまな編集権限の切り替えを行うことができます。たとえば、事前にログイン画面を作っておき、そこでのユーザーに権限に応じて切り替える、呼び出し元の画面の設定によって切り替える、などです。 ここでは、編集権限を選択する画面から呼び出す手順を例に、そのプログラム例を紹介します。 まず、編集権限を選択する呼び出し元の画面として、次のようなフォーム(名前は”編集権限メニュー”)を作ります。 ここでは、各コントロールの名前を次のようにしています。
一方、開かれる方の画面(名前は”frm商品マスタ”)は次のようなものとします。 ここでは、サブフォームの名前を「frm商品マスタ_sub」、編集権限を表示するテキストボックスの名前を「txt編集権限」としています。 次に、それぞれの画面に下記のようなVBAのコードを記述します。 ■「編集権限メニュー」フォームのモジュール Private Sub chkAll_AfterUpdate() '[すべての権限]チェックボックスの更新後処理 'ONになったら更新・追加・削除をON、表示不可をOFF 'OFFになったらその逆 Me!chkEdits = Me!chkAll Me!chkAdditions = Me!chkAll Me!chkDeletions = Me!chkAll Me!chkPrhbtOpen = Not Me!chkAll End Sub Private Sub chkEdits_AfterUpdate() '[更新の許可]チェックボックスの更新後処理 '共通プロシージャを実行 cbfSetAuthority End Sub Private Sub chkAdditions_AfterUpdate() '[追加の許可]チェックボックスの更新後処理 '共通プロシージャを実行 cbfSetAuthority End Sub Private Sub chkDeletions_AfterUpdate() '[削除の許可]チェックボックスの更新後処理 '共通プロシージャを実行 cbfSetAuthority End Sub Private Sub chkPrhbtOpen_AfterUpdate() '[表示不可]チェックボックスの更新後処理 If Me!chkPrhbtOpen Then 'ONになったらすべて・更新・追加・削除をOFF Me!chkAll = False Me!chkEdits = False Me!chkAdditions = False Me!chkDeletions = False End If End Sub Private Sub cbfSetAuthority() '3つのON/OFFに応じてすべてと不可を切り替え '3つともONならすべての権限をON(それ以外はOFF) Me!chkAll = (Me!chkEdits And Me!chkAdditions And Me!chkDeletions) '3つともOFFなら表示不可をON(それ以外はOFF) Me!chkPrhbtOpen = (Not Me!chkEdits And Not Me!chkAdditions And Not Me!chkDeletions) End Sub Private Sub cmd開く_Click() '[開く]ボタンクリック時 'frm商品マスタを開く On Error Resume Next DoCmd.OpenForm "frm商品マスタ" End Sub ■「frm商品マスタ」フォームのモジュール Private Sub Form_Open(Cancel As Integer) 'フォームを開くとき '表示不可なら開かない If Forms!編集権限メニュー!chkPrhbtOpen Then Beep MsgBox "画面を開く権限がありません!", vbOKOnly + vbExclamation Cancel = True End If End Sub Private Sub Form_Load() 'フォーム読み込み時 Dim frm As Form Set frm = Forms!編集権限メニュー 'サブフォームの編集権限を設定 With Me!frm商品マスタ_sub.Form .AllowEdits = frm!chkEdits .AllowAdditions = frm!chkAdditions .AllowDeletions = frm!chkDeletions End With '編集権限のテキストボックスを設定 Me!txt編集権限 = IIf(frm!chkEdits, "更新 ", "") & _ IIf(frm!chkAdditions, "追加 ", "") & _ IIf(frm!chkDeletions, "削除 ", "") End Sub 【プログラムのポイント】
実行例:
|
|||
|
Copyright © T'sWare All rights reserved |