#712 ボタンをクリックしたときだけ新規レコードを追加可とするには? フォーム、VBA

テーブルやレコード編集可能なクエリをレコードソースとするフォームを作ると、既定でレコードの更新・追加・削除可能なフォームとなります。ここでは、通常時は”追加不可”で、あるコマンドボタンをクリックすると1件だけ新規レコードが追加できるようになるフォームの例を説明します。

まず例として次のようなデザインのフォームを作成します。
サブフォーム(サブフォームコントロールではなくサブフォームのフォームそのもの)の「追加の許可」プロパティは既定値として”いいえ”に設定しておくのがひとつのポイントです。


ここでは、各プロパティを次のように設定します。
  • レコード追加ボタン
    ・名前  →  cmdレコード追加

  • メインフォーム上のサブフォームコントロール
    ・名前  →  frm商品_sub

  • サブフォーム
    ・レコードセット  →  ダイナセット
    ・追加の許可  → いいえ
    ・削除の許可  →  はい
    ・更新の許可  →  はい

次にレコード追加ボタンのクリック時イベントプロシージャを次のようにします。

ここでのポイントは、「追加の許可」プロパティのVBA上の記述である「AllowAdditions」プロパティを一時的に「True(はい)」にしたあと1レコード追加し、「False(いいえ)」に戻すという点です。

また、「AddNew」メソッドでレコードを追加した際、そのままだと追加操作がすぐに取り消されたような状態になってしまい、追加したレコードが画面上消えてしまいます。
そこで、いずれかのフィールドに任意の値をダミーで代入します。それによって追加レコードに対して編集作業が開始されたと判断され、以降画面上から消えることなくそのレコードの編集操作ができる状態になります。
※ここでは空の文字列を商品コードに設定していますが、データによって既定値があればその値をここでセットしてもよいかもしれません。

Private Sub cmdレコード追加_Click()
'[レコード追加]ボタンクリック時

  With Me!frm商品_sub.Form
    'サブフォームを一時的に追加許可
    .AllowAdditions = True
    '新規レコードを追加
    .Recordset.AddNew
    'ダミーのデータを設定
    !商品コード = ""
    'サブフォームを追加不可に戻す
    .AllowAdditions = False
  End With

  'すぐに入力できるようサブフォームの商品コードにフォーカス移動
  With Me!frm商品_sub
    .SetFocus
    !商品コード.SetFocus
  End With

End Sub


実行例:
  • 初期状態(新規レコードは追加不可状態)

  • [レコード追加]ボタンクリックした直後

  • 新規レコードに入力しているところ

  • 新規レコードを保存したあと(新規レコード追加不可状態に戻る)
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved