Microsoft アカウントでサインイン
サインインまたはアカウントを作成してください。
こんにちは、
別のアカウントを選択してください。
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

ここでのコンテンツは、Northwind 2.0 Developer Edition と Starter Edition に適用される場合があります。 

VBA (Visual Basic for Applications) は、すべての Office 製品で使用されるプログラミング言語です。 VBA を学習すると、Access だけでなく、すべての Office 製品を操作できます。
"ハウツー" を検索するときは、必ず Access の具体的な例を探し、検索に Microsoft Access を含めます。 多くの場合、他の Office 製品のソリューションは機能しますが、保証はありません。 Microsoft Access は成熟した製品です。それはそこに多くの例があることを意味します。これはあなたに最適です! 

また、Access プログラミングに関する古い書籍を見てみることもできます。 古い本の多くは、元のコストのほんの一部で古い本のサイトでまだ利用可能です。 Microsoft Web サイトを確認して、引き続きサポートされている Access のバージョンを確認し、それらのバージョンに対応します。

Office のサポート リソースの終了 - Office の展開 |Microsoft Learn  

Microsoft の Access ドキュメントへのリンクを次に示します。

Microsoft Access ファイルは Office ファイルです。 Office ファイルは、"信頼できる場所" にあるか、"コンテンツ" が有効になっている必要があります。 これらの項目は、作成したアイテムまたは信頼できるソースから取得されているため、"安全" と見なされます。 Office ファイルを開くたびに、[信頼できる場所] が表示されるかどうかを確認します。 ここから、これを信頼済み/有効と見なします。 注: 新しいバージョンのアプリケーションがリリースされ、信頼されていない場所から開かれると、コンテンツを有効にするプロセスが繰り返されます。

信頼できる場所の詳細を確認します。 

マクロ、関数、およびサブは、ビジネス ロジックを Access データベースに実装する方法です。 開始する前に 、スコープと可視性 を理解しておくことが重要です。


フォーム上のコントロール (ボタン、テキスト ボックス、ラベルなど) のイベント (コントロールのクリックなど) は、レコードの追加、削除、フォームの開き方など、他のプロセスをトリガーします。 これらのプロセスは、マクロまたは VBA を使用して実装できます。 Northwind Starter Edition では、ほとんどのマクロと、マクロが必要な機能を実行できない VBA が使用されます。 Northwind Developer Edition では、主に VBA が使用されます。 

一部のコントロールの種類には、マクロを自動的に作成するためのウィザードが組み込まれています。 たとえば、フォームにコマンド ボタンを追加すると、ボタンのいくつかの機能を提供するウィザードが開きます。 コンボ ボックスを追加すると、フォーム上の特定のレコードを検索するように構成できるウィザードが開きます。 

ナビゲーション ウィンドウは、すべてのデータベース オブジェクトを表示およびアクセスするメインな方法であり、既定では [アクセス] ウィンドウの左側に表示されます。 
Northwind ナビゲーション ウィンドウがカスタマイズされました。 Northwind Starter 2.0 というカスタム カテゴリを作成しました。 これにより、機能領域別にオブジェクトを整理できます。

場合によっては、変数を作成したオブジェクトがスコープ外になった後に変数が存在する必要があります。 上記の 「スコープと可視性」を 参照してください。 これを行うには、パブリック変数、TempVars、およびローカル テーブルに値を格納する 3 つの主要な方法があります。 多くの開発者は、これらの組み合わせを使用します。 それぞれに長所と短所があります。  それぞれの詳細については、以下を参照してください。 

VBA モジュールのパブリック変数: 

TempVars: 

ローカル テーブルに値を格納する

  • 現在のセッションにはパブリック変数と TempVars が存在し、アプリケーションが閉じられるとスコープ外になります。 セッション間でユーザー固有の変数を保持する場合はどうなりますか? これらの種類の値は、ローカル テーブルに格納できます。 Northwind 2.0 では、SystemSettings というテーブルに 1 つの変数が保存されます。 テーブルの値は ShowWelcome です。 この値は、ログインするたびにようこそ画面を表示するかどうかを Access に通知します。

Access でコントロール ウィザードを使用して作成されたマクロには、エラー処理が含まれることがよくあります。コントロール ウィザードを使用して作成された VBA は、汎用 の MsgBox Err.Description に制限される場合があります。

Northwind 2.0 では、少なくとも VBA コードに対して、より適切に実行する方法について説明します。 グローバル エラー ハンドラーと呼ばれるものを実装しました。 プロシージャで発生するエラーは、グローバル レベルで関数を呼び出してエラーを表示します。 ここでの大きな利点は、エラー処理が一貫していることです。 また、メッセージを変更する必要がある場合 (たとえば、エラー番号を追加で表示したり、エラーをファイルに記録したりするには)、1 つの場所でのみ実行する必要があります。 

clsErrorHandler は、エラー処理コードを実装する クラス モジュール です。 クラス モジュールは、すべてのメインとヘルパー関数を 1 つのユニットにまとめ、コードをカプセル化します。

AutoExec マクロは 、modStartup で Startup 関数を呼び出します。 clsErrorHandler のインスタンスを作成し、グローバル変数として保存して、アプリケーション全体で使用できるようにします。

実際、プロシージャのエラー処理コードは非常に一貫性があるため、各プロシージャに適切なエラー ハンドラーを用意した特定の VBA コードを使用して、5 分以内にすべてのコードを作成できました。 (テンプレートに含まれていないコード)。 

MRU または [最近使用済み] は、最近使用した注文と発注書の一覧です。 これらの項目に頻繁に戻って、次の状態に戻す場合があります。 MRU リストは、最近使用したファイルの一覧として Office 製品でよく見られます。もう一度開き直す必要があります。

Northwind Dev Edition では、MRU 機能 (Starter エディションには存在しません) を実装するには、まず次の項目を確立する必要があります。 

  1. MRU 情報を格納するテーブル。

  2. 注文または発注書 (PO) が開かれたときにテーブルを更新するコード。

  3. リボンの MRU ドロップダウンを更新するコード。

  4. MRU 項目がリボンから選択されたときに項目を読み込むコード。

これらのそれぞれについて詳しく見てみましょう。 


1. MRU 情報を格納する表。

テーブル MRU の設計は、特にそのインデックスを確認する価値があります。 リボンドロップダウン リストの MRU 項目の簡単な並べ替えに役立つ重複インデックス SortIdx と、アイテムが 1 回だけ発生するビジネス ルールを適用する一意のインデックスがあることに注意してください。 たとえば、同じ順序を 2 回開いても、MRU テーブルに 2 つのレコードは作成されません。


テーブルは、データベース内のすべての MRU 関連の PK (主キー) フィールドが AutoNumber であるため、LONG Integer データ型を PKValue に使用できるという事実を利用します。

2. 注文または P.O. が開かれたときにテーブルを更新するコード。

NW2 では、既存のレコードが再度更新されたときではなく、新しいレコードが作成されたときにのみ MRU リストに追加することを選択しました。 AddToMRU 呼び出しをForm_AfterInsertからForm_AfterUpdateに移動してサポートすることは確かです。

AddToMRU および DeleteFromMRU プロシージャは modGlobal に実装されています。これは、パブリック プロシージャが任意のフォームから表示される標準モジュールです。

AddToMRU (名前が示すように) は、MRU テーブルに新しい項目を追加し、必要に応じて、最大サイズ (MAX_MRU_COUNT) を超えた場合は最も古いレコードを削除して、元に戻します。 最後の手順はおそらく Access 開発者に最もよく知られていません。リボンのドロップダウンを更新する必要があり、InvalidateControl を呼び出すことによって実行されます。 これは、リボンの初期化プロセスを再実行するためのシグナルです。 

3. リボンの [MRU] ドロップダウンを更新するコード。 

起動時に InvalidateControl が呼び出されると、複雑な関数セットが実行され、リボンが設定されます。  これらのプロシージャは、テーブル uSysRibbons の Ribbon XML によって呼び出されます。一部は次のとおりです。

<group id="gCurrentStatus" label="MRU">
    <box id="bxMRU" boxStyle="vertical">
        <dropDown id="ddMRU"
                  getItemCount="ddMRU_GetItemCount"
                  getItemLabel="ddMRU_GetItemLabel"
                  getSelectedItemIndex="ddMRU_GetSelectedItemIndex"
                  getItemID="ddMRU_GetItemID"
                  onAction="ddMRU_OnAction"
                  screentip="Most Recently Used Objects">
        </dropDown>
    </box>
</group>

これら 4 つのコールバック関数によってドロップダウンが設定されます。 これは、標準的なコンボボックスについて 本明細書で説明したのとほぼ同じ考えであることに注意してください。

modRibbonCallbackDebug.Print 行のコメントを解除し、アプリケーションを再起動すると、イミディエイト ウィンドウに次のようなシーケンスが表示されます。 

ddMRU_GetItemCount    ddMRU    6 
ddMRU_GetItemLabel    ddMRU    0      Order 60, Proseware, Inc.
ddMRU_GetItemID       ddMRU    0       2 
ddMRU_GetItemLabel    ddMRU    1      Order 62, Best For You Organics Company
ddMRU_GetItemID       ddMRU    1       4 
ddMRU_GetItemLabel    ddMRU    2      Order 63, Wide World Importers
ddMRU_GetItemID       ddMRU    2       5 
ddMRU_GetItemLabel    ddMRU    3      Order 66, Proseware, Inc.
ddMRU_GetItemID       ddMRU    3       8 
ddMRU_GetItemLabel    ddMRU    4      Order 67, Best For You Organics Company
ddMRU_GetItemID       ddMRU    4       9 
ddMRU_GetItemLabel    ddMRU    5      Order 68, Adatum Corporation
ddMRU_GetItemID       ddMRU    5       10 
ddMRU_GetSelectedItemIndex  ddMRU    0


ここでは、Access が最初に、ddMRU_GetItemCount の ByRef 引数に読み込む項目の数を返すプロシージャを呼び出 していることがわかります。 これは、MRU テーブルに対してクエリを開き、それをキャッシュするタイミングでもあります。これは、数回使用されようとしているためです。 

その後、リボンは 2 つのプロシージャを繰り返し呼び出して、2 列のドロップダウンの ID とラベルの値を取得します。 

最後に、プロシージャを呼び出して、選択する項目を見落とします。 (ここでは、最初のケースです)。 

4. MRU 項目がリボンから選択されたときに項目を読み込むコード。

他のリボン項目と同様に、リボン XML の OnAction プロパティは、アクションの実行に使用するコールバック関数を指定します。

onAction="ddMRU_OnAction

このプロシージャは modRibbonCallback で実装されます。 既に開いているレコードセットを再利用して、選択した項目を含むレコードを検索し、必要な TableName に応じて対応するフォームを開き、読み込む PK 値を渡します。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

フィードバックをいただき、ありがとうございます。

×