AccessVBA 練習問題2


この問題を始めるには「VBA練習2.mdb」が必要です。(DLページにあります)

【問1】 コンボボックスを使ってレコードの抽出

  1. 「F得意先入力」フォームのフォームヘッダーに、コンボボックスを一つ作成しましょう。名前は[都道府県抽出]とします。ラベルの標題も同じ名前にします。コンボボックスの[値集合ソース]には[Q都道府県]クエリを使います。
  2. [都道府県抽出]コンボボックスの更新後処理イベントに、コンボボックスで選択した値を条件に抽出を実行するプロシージャを作成しましょう。
  3. コンボボックスで都道府県を選択し、結果を確認しましょう。

 

【問2】 テキストボックスを使ってレコードを抽出
  1. 「F得意先入力」フォームのフォームヘッダー、[都道府県抽出]コンボボックスの下あたりにテキストボックスを一つ作成しましょう。名前およびラベル標題を[顧客抽出]とします。
  2. 作成したテキストボックスの右側に、コマンドボタンを作成しましょう。ボタンの名前と、標題を[抽出]とします。
  3. [抽出]ボタンのクリック時イベントに、テキストボックスに入力した値(顧客名)でレコードを抽出するプロシージャを作成しましょう。但し条件は“文字列を含む”とします。
  4. テキストボックスに“吉岡”と入力して[抽出]ボタンをクリックし、結果を確認しましょう。

 

【問3】 条件に応じて処理を分岐する

  1. [顧客抽出]テキストボックスが空白(Null)で[抽出]ボタンをクリックした場合は、レコードの抽出をせず、“顧客名を入力してください”のコメントをMsgBoxで表示するステートメントを追加しましょう。
  2. フォームから結果を確認しましょう。

 

【問4】 すべてのレコードを表示する

  1. [抽出]ボタンの右側にコマンドボタンを作成しましょう。
  2. このボタンの名前と標題を[すべて]としましょう。
  3. このボタンがクリックされたら、すべてのレコードが表示されるようイベントプロシージャを作成しましょう。
  4. 抽出解除後は、[都道府県抽出][顧客抽出]ボックスともに空白にするステートメントを追加しましょう。
  5. フォームから抽出解除を確認しましょう。一度抽出を実行してから[すべて]ボタンをクリックします。


【問5】 コントロールの表示/非表示切り替え

  1. [F得意先入力]フォームを開いたときに[すべて]ボタンを非表示にするイベントプロシージャを作成しましょう。
  2. フィルタを実行したときには[すべて]ボタンを表示し、フィルタを解除したときには[すべて]ボタンを非表示にするよう、プロシージャにステートメントを追加しましょう。
  3. フォームビューを開いて[すべて]ボタンの表示/非表示を確認しましょう。


【問6】 レコードを印刷する

  1. [F得意先入力]フォームのフォームフッターにコマンドボタンを作成し、[ハガキ印刷]と名前をつけましょう。(標題も同じ)
  2. [ハガキ印刷]ボタンをクリックすると[R完成ハガキ]レポートを印刷プレビューするイベントプロシージャを作成しましょう。
  3. [ハガキ印刷]ボタンをクリックして、[R完成ハガキ]レポートが表示されることを確認しましょう。


【問7】 特定のレコードだけを印刷する

  1. [F得意先入力]フォームに表示されているレコードだけを、[R完成ハガキ]レポートプレビューするよう、ステートメントを編集しましょう。
  2. [F得意先入力]フォームから任意の顧客を抽出し、[ハガキ印刷]ボタンをクリックし、表示されている値と一致したレコードだけが印刷プレビューされるかを確認しましょう。
    ※レポートの[得意先コード]とフォームコントロール[得意先コード]を一致させます。
  3. 確認後は抽出を解除しておきましょう


【問8】 データが入力されてない場合のエラー処理

  1. [問7](特定のレコードだけを印刷)を完成後、[F得意先入力]フォームに何も入力されてない状況(新規入力画面)で[ハガキ印刷]ボタンをクリックすると実行時エラーになります。実行時エラー(3075)を確認しましょう。
  2. エラー番号“3075”の実行時エラーが発生したときには、“印刷するデータがありません”と、メッセージボックスに表示してプロシージャを終了するステートメントを追加しましょう。それ以外のエラーの場合はエラーの情報を表示するようにステートメントを変更しましょう。
  3. 通常処理後はプロシージャを終了するよう、ステートメントを追加しましょう。(エラー処理行を実行しないため)
  4. エラー処理の結果を確認しましょう。


【問9】 1ページに印刷する行数を指定する

  1. [R売上一覧]レポートの[詳細]セクションに改ページコントロールを作成しましょう。コントロール名は[改ページ]とします。
  2. ページヘッダーセクションの“フォーマット時”イベントに、改ページコントロールを無効にするイベントプロシージャを作成しましょう。
  3. [詳細]セクション([受注ID]の左側)にテキストボックス[カウンタ]を作成し、レコード数をカウントするよう設定しましょう。
  4. [詳細]セクションの“フォーマット時”イベントに、10行ごとに改ページされるようイベントプロシージャを作成しましょう。(Mod演算子を使う)
  5. 印刷プレビューを実行し、1ページに10行のレコードが表示されていることを確認しましょう。
  6. レポートの[カウンタ]テキストボックスを非表示にするステートメントを追加しましょう。


【問10】 フォームからレポートを開く

  1. [F受注伝票]フォームの[売上一覧印刷]ボタンをクリックしたときに、[R売上一覧]レポートをプレビューするイベントプロシージャを作成しましょう。
  2. 上記で作成したプロシージャの結果を確認しましょう。


【問11】 SQLステートメントを編集する

  1. [Q都道府県]クエリのSQLビューで、重複する都道府県が表示されないよう、SQLステートメントを編集しましょう。重複しないようSQLで記述するには、フィールドの前に“DISTINCT”と書きます。
  2. “都道府県”フィールドの昇順で並べかえるよう、SQLステートメントを追加しましょう。並べ替えには、“ORDER BY”句を使用します。
  3. 編集したSQLステートメントの結果を確認しましょう。

【問12】 アクションクエリを実行する

  1. [T商品マスタ]テーブルには、[備考]フィールドの値が“限定品”のレコードが2件あります。[T限定品]テーブルにはレコードが1件もありません。確認してテーブルを閉じましょう。
  2. [Fその他]フォームの[限定品の追加]ボタンをクリックしたときに、追加アクションクエリを実行するかどうかを確認するメッセージボックス“限定品追加クエリを実行しますか?”を表示し、[はい]がクリックされたときには、[T商品マスタ]テーブルの[備考]フィールドの値が“限定品”のレコードを、[T限定品]テーブルに追加するイベントプロシージャを作成しましょう。[いいえ]がクリックされたときにはプロシージャを終了します。
  3. [いいえ]→[はい]の順にボタンをクリックし、プロシージャの結果(レコードが追加されたこと)を確認しましょう。
  4. [T商品マスタ]テーブルには、[備考]フィールドが“限定品”のレコードが2件あります。[Fその他]フォームの[限定品の削除]ボタンをクリックしたときに、削除アクションクエリを実行するかどうかを確認するメッセージボックス“限定品削除クエリを実行しますか?”を表示し、[はい]がクリックされたら、削除クエリを実行するプロシージャを作成しましょう。[いいえ]がクリックされたときにはプロシージャを終了します。
  5. [T商品マスタ]から2件の“限定品”レコードが削除されたかを確認しましょう。


【問13】 Excelへエクスポートする

  1. [Fエクスポート]フォームの[オブジェクト選択]コンボボックスには“T得意先マスタ”と“T商品マスタ”が値集合ソースとして設定されています。このフォームを実行しコンボボックスからオブジェクト名を選択、[OK]ボタンをクリックしたときに、“テスト.xls”のファイル名で既定のフォルダへ、Excelファイルとしてエクスポートするイベントプロシージャを作成しましょう。Excelのバージョンは“Excel 2000-2002”形式とします。
  2. “エクスポート完了しました”のメッセージボックスを表示するステートメントを追加しましょう。
  3. ホームビューを開き[オブジェクト選択]ボックスから、“T得意先マスタ”を選択します。[OK]ボタンをクリックしてエクスポートを実行しましょう。
  4. 既定のフォルダにExcelファイルが作成されたことを確認しましょう。
  5. InputBox関数を使って入力した文字列を、エクスポート後のファイル名とするよう、ステートメントを変更しましょう。引数の文字列は“ファイル名を入力してください”とし、タイトルは“エクスポート”とします。
    拡張子[.xls]はステートメントの中で設定します。
  6. Accessに切り替え、フォームから“T得意先マスタ”をエクスポートしましょう。入力するファイル名は“得意先”とします。
  7. 既定のフォルダにExcelファイル“得意先.xls”が作成されたことを確認しましょう。確認後フォームは閉じておきましょう。


【問14】 エクスポートのエラーを防ぐには

  1. [Fエクスポート]フォームの[オブジェクト選択]ボックスで値が選択されずにエクスポートすると、エラーが発生します。値が選択されてない場合、“テーブルまたはクエリを選択してください”とメッセージボックスを表示し、プロシージャを終了するステートメントを[エクスポート実行]のクリック時イベントに追加しましょう。
  2. オブジェクトを選択せずに[OK]ボタンを押して、動作を確認しましょう。
  3. ファイル名を入力するダイアログボックスで何も入力せずに「OK」をクリックしたときには、“ファイル名が入力されていません。キャンセルします”のメッセージを表示し、エクスポートしないようイベントプロシージャを修正しましょう。このプロシージャの動作を確認しましょう。(キャンセルしたときも同様になります)
  4. ダイアログボックスにファイル名を入力して正常にエクスポートを実行した後には、[Fエクスポート]フォームを閉じ[Fその他]フォームを開くよう、ステートメントを追加しましょう。動作を確認しましょう。確認後はすべてのフォームを閉じましょう。


【問15】 ADOを利用する

  1. この問題では、データベースとレコードセットを扱うためのオブジェクト変数を定義し、起動中のAccessに接続します。さらに、VBAから[Q割引]クエリのデータを編集できるようにします。ADOを使うことによって、テーブルやクエリを開かずにデータを編集することができます。
    [Fその他]フォームの[割引設定]ボタンをクリックしたときに、[Q割引]クエリの“割引”フィールドに値を代入できるよう、ADOを使ったイベントプロシージャを作成しましょう。数量が10以上の場合、10%、10未満の場合は0%の割引率を“割引”フィールドに代入するステートメントを追加しましょう。
  2. 割引設定が終了したら“割引設定を終了しました”とメッセージボックスに表示し、ADOの処理を終了するステートメントを追加しましょう。
  3. データ変更の動作を確認しましょう。

【問16】 ループ処理

  1. すべてのレコードの“割引”フィールドに割引率が代入されるよう、ループ処理を追加しましょう。
  2. [割引設定]ボタンをクリックし、[Q割引]クエリのすべてのレコードの“割引”フィールドに値が代入されたことを確認しましょう。
    ※ループ処理を行うときには、無限ループにならないよう十分注意をしてください。

【問17】 DAOを利用する(ループ処理)

  1. 1. フォームに連結したレコード操作するには、DAOオブジェクトを使う必要があります。DAOが使用できるよう、オブジェクトライブラリの参照設定をしましょう。
  2. [F得意先入力]フォームの[フリガナ]フィールドのデータが全角カタカナであることを確認しておきましょう。
  3. [F得意先入力]フォーム(任意の位置)にコマンドボタン[ふりがな変更]を作成しましょう。(標題も同じ)
  4. [ふりがな変更]ボタンがクリックされたときに、[F得意先入力]フォームの“フリガナ”フィールドに入力されている全角カタカナの文字列データが、すべて半角カタカナに変換されるよう、イベントプロシージャを作成しましょう。
    変換には“StrConv関数”(引数にはvbNarrowを指定)を使用します。
  5. フォームから[ふりがな変更]ボタンをクリックし、文字列が変更されたことを確認しましょう。