リンクユニット

Office 2019 Access 2019

フォームを参照用と編集用にボタンで切り替え(埋め込みマクロで設定)

投稿日:2020年9月22日 更新日:

Accessで1つのフォームを作成して、すべての内容を見せてレコードの編集ができるようにしています。

でも、そのフォームを開く時に制限を付けたいということあります。たとえば、管理者以外には、一部の情報に絞って読み取り専用で見せたいし、出力ボタンなどは非表示にしたいという場合です。

作成済みのフォームをコピーして、参照用のフォームを別途作成し、ボタンでそれぞれのフォームを開くようにしてもいいのですが、同じフォームでも開く時にマクロで制御することができます。

オブジェクトを増やしたくない、データベースのサイズを気にするような場合はお勧めです。

メニューフォーム

参考ここでは、ウィンドウは重ねて表示する設定にしています。

[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い

Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。従来からAccessを使用している方に ...

続きを見る

テーブルの確認


ここでは、以下のような顧客情報の一覧を作成しています。

データシートビューです。

テーブルのデータシートビュー

デザインビューは、以下のようになっています。

テーブルのデザインビュー

クエリの作成

[コース]フィールドの中で[一般]コースのレコードのみを表示するクエリを作成します。

デザイングリッドにテーブル[T_顧客]のすべてのフィールドを表示して、[コース]の[抽出条件]に["一般"]と入力します。

クエリのデザインビュー

データシートビューで確認すると、以下のように[一般]コースのレコードのみが表示されます。

クエリのデータシートビュー

作成したクエリは、[Q_一般]という名前で保存します。

フォームの作成

テーブル[T_顧客]を基に分割フォームを作成して、[F_顧客一覧]という名前を付けて保存します。

分割フォームの作成

フォーム[F_顧客]のフォームビューは、以下のようになっています。

分割フォームの完成

参考分割フォームの作成については、以下の記事で解説しています。

分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方

Accessでは、画面を2つに分け[単票フォーム]と[データシート]を同時に表示できる[分割フォーム]というのがあります。Access200 ...

続きを見る

Excelへ出力するためのボタンを設置

Excelへ出力するボタンを設置します。

フォーム[F_顧客一覧]をデザインビューで表示します。

[デザイン]タブの[コントロール]グループにある[ボタン]をクリックして、フォームヘッダーでドラッグしてボタンを挿入します。

コマンドボタンウィザード]が表示されたら、[キャンセル]ボタンをクリックして閉じます。

コマンドボタンの挿入

コマンドボタンのプロパティを開いて、名前や標題を修正します。コマンドボタンの名前は、[その他]タブで修正します。

ここでは[出力ボタン]としています。

コマンドボタンの標題

[イベント]タブの[クリック時]の[...]ボタンをクリックします。

[ビルダーの選択]ダイアログボックスが表示されますので、[マクロビルダー]を選択して[OK]ボタンをクリックします。

マクロビルダーの起動

[マクロツール]が表示されます。アクション選択の▼ボタンをクリックして、[書式設定を保存したままエクスポート]を選択します。最後から5番目にあります。

[書式設定を保存したままエクスポート]を選択

そして、以下のように設定します。

[書式設定を保存したままエクスポート]の設定

[閉じる]ボタンをクリックして閉じます。

マクロツールを閉じる

メッセージウィンドウが表示されたら、[はい]をクリックします。

メッセージウィンドウ

プロパティには、[埋め込みマクロ]と表示されます。

コマンドボタンのプロパティ[クリック時]

参考Excelへ出力するボタンの作成する方法は、他にもあります。以下の記事で解説しています。

Excelへ出力(エクスポート)するコマンドボタンの作成

Access2010でテーブルやクエリをExcelへ出力するマクロを作成して、それをコマンドボタンに登録する方法です。 マクロの作成は3つの ...

続きを見る

パスワードを入力するフォームを作成

編集可能なフォームは、パスワードを知っている人しか開けないようにしたいと思います。

テキストボックスに[定型入力ウィザード」でパスワードを設定

空白のフォームを作成して、テキストボックスを1つ挿入します。

そして、定型入力ウィザードを使って[パスワード]を設定します。

テキストボックスのプロパティを表示して、[データ]タブの[定型入力]にある[...]ボタンをクリックします。

テキストボックスのプロパティ[定型入力]

[定型入力ウィザード]が表示されますので、[パスワード]を選択します。

定型入力ウィザード

プロパティには、[パスワード]と表示されます。

テキストボックスのプロパティ

[OK] ボタンと[キャンセル]ボタンを設置

[OK] ボタンと[キャンセル]ボタンを設置します。

[OK]ボタンと[キャンセル]ボタン

そして、それぞれのボタンは埋め込みマクロで以下のように設定します。

[OK]ボタンの埋め込めマクロです。

テキストボックス[パスワード]へ入力した値が[1234]であれば、フォーム[F_顧客一覧]を開いて、違うなら[パスワードが違います]というメッセージウィンドウを表示しますという内容になります。

[OK]ボタンの埋め込みマクロ

[キャンセル]ボタンの埋め込みマクロです。

[オブジェクトの種類]の指定を省略した場合は、アクティブウィンドウが閉じられます。

[キャンセル]ボタンの埋め込みマクロ

パスワードを入力したら、フォームが開くかどうかの動作を確認します。また、パスワードを間違えた場合の動作も確認しておきます。

フォームに名前を付けて保存します。ここでは[F_パスワード]とします。

パスワード入力フォームで動作確認

参考パスワード入力フォームについては、以下の記事で解説しています。詳細は、以下の記事を参照してください。

パスワードを入力してフォームを開くようにする

Accessでパスワードを入力して、パスワードが合えばフォームを開くようにする方法です。 注意ここでは、Accessのオプションでウィンドウ ...

続きを見る

メニューフォームの作成

参照用のフォームを開くためのボタンと管理者用のボタンを作成します。

管理者用のボタンをクリックすると、フォーム[F_パスワード]が開くように設定します。

ここでは、[顧客一覧を参照]と、[管理者用]という標題を付けています。

メニューフォームの作成

管理者用ボタンをクリックすると、フォーム[F_パスワード]が開くように設定します。

[管理者用]ボタンの埋め込みマクロです。

[管理者用]ボタンの埋め込みマクロ

埋め込みマクロでフォームに制限をかける

[顧客一覧を参照]ボタンをクリックしたら、フォーム[F_顧客一覧]を開くようにするのですが、制限をかけたフォームにします。

マクロで以下の4つの内容で制限をかけます。

  • フォームのデータモードは編集ができないように[読み取り専用]にします。
  • フォームのレコードソースを[Q_一般]にします。
  • [Excelへ出力]ボタンを非表示にします。
  • フォームヘッダーのタイトルを変更します。

[顧客一覧を参照]ボタンのプロパティを表示して、マクロツールを表示します。

[顧客一覧を参照]ボタンのプロパティ

[F_顧客一覧]を[読み取り専用]で開く

まず、[フォームを開く]アクションを選択します。

[フォーム名]は、[F_顧客一覧]を選択します。

[データモード]は、▼ボタンをクリックして[読み取り専用]を選択します。

マクロアクション[フォームを開く]

フォームのレコードソースを変更

[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]をクリックします。

[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]

[新しいアクションの追加]の▼ボタンをクリックして、[値の代入]をクリックします。最後から4番目にあります。

マクロアクションから[値の代入]を選択

[値の代入]のポップヒントには、以下のように記されています。

値の代入

フォーム、フォームのデータシート、またはレポートにある、コントロール、フィールド、またはプロパティに値を設定します。

マクロアクション[値の代入]

アイテムのテキストボックスには、以下のように入力します。

[Forms]![F_顧客一覧].[RecordSource]

[値の代入]でフォームのレコードソースを変更

[式]にはクエリの名前を入力します。クエリ名は、ダブルクォーテーションで括ります。

"Q_一般"

参考これは、フォーム[F_顧客一覧]のプロパティで[レコードソース]をクエリ[Q_一般]に変更するということです。

フォーム[F_顧客一覧]のプロパティ

[F_顧客一覧]の[出力ボタン]を非表示に変更

フォーム[F_顧客一覧]のフォームヘッダーに設置している[出力ボタン]を非表示にします。

[アイテム]のテキストボックスに以下のように入力します。

[Forms]![F_顧客一覧]![出力ボタン].[Visible]

[式]には、以下のように入力します。

false

マクロアクション[値の代入]

参考入力していると、補助メニューが表示されますので、一覧から選択していくとミスを軽減できると思います。

入力補助ツール

この値の代入の設定は、[出力ボタン]のプロパティの[可視]で[いいえ]を設定したものと同じになります。

[出力ボタン]のプロパティ

フォームヘッダーのタイトルを変更

フォーム[F_顧客一覧]のフォームヘッダーのタイトルを変更します。

[アクションの追加]で今度は、以下のように設定します。

[値の代入]を選択して、[アイテム]には、以下のように入力します。

[Forms]![F_顧客一覧]![Auto_Header0].[Caption]

[式]には、変更したい文字列入力します。ここでは、以下のように入力します。ダブルクォーテーションで括ります。

"顧客一覧・一般コースの参照"

マクロアクション[値の代入]

参考この設定は、フォーム[F_顧客一覧]のフォームヘッダーの[標題]を変更するということです。

タイトルのラベルの大きさは、少し広めにしておく必要があります。

フォームヘッダーのタイトルのプロパティ

上記の設定が終わったら、マクロツールを閉じて、フォームも上書き保存します。

ボタンのプロパティ[イベント]タブの[クリック時]には、[埋め込みマクロ]と表示されています。

[顧客一覧を参照]ボタンのプロパティ

注意埋め込みマクロで設定した後、メニューフォームのボタンをクリックして[F_顧客一覧]を表示して、[F_顧客一覧]フォームの編集はしないように気を付けてください。

マクロでプロパティの値を書き換えているので、上書き保存すると、プロパティの値まで上書きされてしまいます。

[F_顧客一覧]フォームを編集するときは、単独で開いてから行うようにしたほうが無難です。

メニューフォームのボタンをクリックした時の動作を確認

フォーム[F_メニュー]をフォームビューで開いて、動作を確認します。

[顧客一覧を参照]ボタンをクリックすると、以下のようにフォーム[顧客一覧]が表示されますが、読み取り専用となっていて編集はできません。

コースは[一般]のみが表示されています。

メニューフォームの[顧客一覧を参照]ボタンをクリックした時のフォーム

[管理者用]ボタンをクリックすると、[パスワード入力]フォームが表示されます。

[管理者用]ボタンをクリックして[パスワード入力フォーム]を表示

そして、正しいパスワードを入力して、[OK]ボタンをクリックすると、編集可能なフォームが表示されます。[VIP]コースのレコードも表示されます。そして、[Excel]へ出力するためのボタンも表示されます。

[パスワード入力フォーム]の[OK]ボタンをクリックした時のフォーム

参考レコードの抽出は、マクロの[フォームを開く]アクションの[Where条件式]に以下のように設定することもできますが、

マクロの[Where条件式]

この場合は、フィルターが適用された状態で表示されますので、フィルターボタンなどを使用して、[一般]以外のレコードも表示できてしまいます。

抽出適用外のレコードが見えてもよい場合、見えては困る場合など、状況に合わせて設定してください。

[Where条件式]で抽出しても構わない場合は、クエリを作成する必要はありません。

フォームビューのフィルター

[Where条件式]での設定は、以下の記事で解説しています。

テキストボックスの文字列でレコードを抽出(埋め込みマクロで設定)

Accessでフォームのテキストボックスに入力した文字列でレコードを抽出する方法です。 ここでは、テーブルを基にウィザードを使って表形式のフ ...

続きを見る

データシートの【ID】をクリックして単票(詳細)フォームを開く

Accessのデータシートの[ID]番号をクリックしたら、その[ID]の単票フォームを開く方法です。 データシートのフォーム名は[F_データ ...

続きを見る

以下の記事では、レポートのボタンで印刷日時の表示/非表示を切り替える方法を解説しています。

コマンドボタンでコントロールの表示と非表示を切り替える

Accessではフォームにボタンを設置して、クリックしてフォームやレポートの表示を実行することが多いです。 2個のボタンを設置して同じレポー ...

続きを見る

また、レポートのレコードソースをオプションボタンの値によって切り替える方法も解説しています。まったく同じレイアウトのレポートであれば、レコードソースを変更するだけなので、レポートは1つで済みます。

フォームのオプションボタンでレポートのレコードソースを切り替え

1つのテーブルから、クエリを作成してデータを抽出することはよくあります。 そのクエリをもとにレポートを作成するとき、レポートのレコードソース ...

続きを見る

Profile

執筆者/はま

もっと理解したいあなたへ

おすすめ記事と広告

-Office 2019 Access 2019

Copyright © 2001-2020 初心者のためのOffice講座 All Rights Reserved.

Copyright© 初心者のためのOffice講座 , 2020 AllRights Reserved Powered by AFFINGER4.