指定フォームの条件をクエリで使う

文字の部分一致

(指定すれば指定文字と一致したものが抽出され、指定しなければ、全データとなる)
Like “*” & [Forms]![fo指定フォーム名]![指定コントロール名] & “*”

範囲指定の場合

(指定範囲は、必須入力項目となります)
Between [Forms]![fo指定フォーム名]![開始] And [Forms]![fo指定フォーム名]![終了]

フォームでの入力支援

数値入力項目のヌル値回避

数値の入力欄で、Deleteキーを押されたとき、空白のままだと計算できないので、
コントロールの[フォーカス喪失時]に、次のように書きます

If IsNull([数値入力のコントロール名]) Then
Me.数値入力のコントロール名 = 0
End If

Escボタン処理

Escボタンが押されたときと同じ状態にしたいとき、
フォームのデータを変更しないで戻りたいとき(キャンセルして戻る)
ボタンの[クリック時]に次のように書きます

If Me.Dirty Then
Me.Undo
End If

必須入力項目のチェック

登録ボタンが押されたとき、入力必須項目のチェック
登録ボタンの[フォーカス取得時]に次のように書きます

If IsNull([住所録番号]) Then
MsgBox (“住所録番号を入力して下さい。 “)
DoCmd.GoToControl “住所録番号”
Exit Sub
End If

入力桁数をチェック

コントロールの[フォーカス喪失時]に次のように書きます
If Len(Me.住所録番号) <> 5 Then
MsgBox (“数字5桁で入力して下さい。”)
DoCmd.CancelEvent
End If

主キーの項目の重複登録チェック

主キーの登録コード(住所録番号など)の入力チェック
新規入力での重複チェックをしています
コントロールの[フォーカス喪失時]に次のように書きます
If DCount(“住所録番号”, “ta住所録”, “[住所録番号]='” & Me.住所録番号 & “‘”) <> 0 Then
MsgBox (“この番号は使用済みです。”)
DoCmd.CancelEvent
End If

モジュールのレコード操作

テーブルを先頭から開いて、1つずつレコードを読んで、処理する

(”PrimaryKey”は主キーの名前、規定値でこの名前になる)
(”to誕生日ca”は、テーブル名)
(指定フォームの条件を元に、年齢を計算して、年齢というフィールドに書き込んでいます)
次のように書きます

Dim dbs As Database
Dim rsttable As Recordset

Set dbs = CurrentDb
Set rsttable = dbs.OpenRecordset(“to誕生日ca”, dbOpenTable)

If rsttable.RecordCount = 0 Then
rsttable.Close
Exit Function
End If

rsttable.Index = “PrimaryKey”
rsttable.MoveFirst

Do Until rsttable.EOF

rsttable.Edit

rsttable!年齢 = IIf(Format(Form_fo誕生日ca.基準日, “mmdd”) >= Format(rsttable!生年月日, “mmdd”), DateDiff(“yyyy”, rsttable!生年月日, Form_fo誕生日ca.基準日), DateDiff(“yyyy”, rsttable!生年月日, Form_fo誕生日ca.基準日) – 1)

rsttable.Update

rsttable.MoveNext

Loop

rsttable.Close

クエリを先頭から開いて、1つずつレコードを読んで、処理する

(”qu誕生日ca”は、クエリ名)
(指定フォームの条件を元に、年齢を計算して、年齢というフィールドに書き込んでいます)
次のように書きます

Dim dbs As Database
Dim rst01 As Recordset

Set dbs = CurrentDb
Set rst01 = dbs.OpenRecordset(“qu誕生日caかな順”, dbOpenDynaset)

If rst01.RecordCount = 0 Then
rst01.Close
Exit Function
End If

rst01.MoveFirst

Do Until rst01.EOF

rst01.Edit

rst01!年齢 = IIf(Format(Form_fo誕生日ca.基準日, “mmdd”) >= Format(rst01!生年月日, “mmdd”), DateDiff(“yyyy”, rst01!生年月日, Form_fo誕生日ca.基準日), DateDiff(“yyyy”, rst01!生年月日, Form_fo誕生日ca.基準日) – 1)

rst01.Update

rst01.MoveNext

Loop

rst01.Close