レコードの新規登録で、直前に入力したデータと同じデータを繰り返して入力することがよくあります。このような場合、直前に入力したデータをフィールド(項目)別に選択して新規登録するレコードに引き継ぐことができれば入力作業の負荷が軽減されます。入力データの引継ぎは、ライブラリーデータベース(MyLib98|MyLib97)に登録されている
CarryField_FS()関数を利用することにより実現することができます。
- Access97を起動してサンプルデータベース Northwind.mdb
を開きます。
- データベースウインドウからフォームタブをクリックして新規作成ボタンをクリックします。
- フォームの新規作成ダイアログから得意先テーブルを選択します。次に、オートフォーム:単票形式を選択してOKをクリックします。
- 得意先のフォームが表示されたら、フォームデザインのアイコン
をクリックしてデザインモードに切り替えます。
- ツールボックスを表示させて、継承させたいテキストボックス(例えば、都道府県)の右側にトグルボタン(またはチェックボックス)を配置します。
 |
| 図1-オートフォームで作成したフォームの都道府県の右側にトグルボタンを配置 |
|
- トグルボタンのタグプロパティに継承させたいテキストボックスのコントロール名(例えば、都道府県)を入力します。
 |
| 図2-トグルボタンのTagプロパティに継承させたいコントロール名を設定 |
|
- トグルボタンのAfter Updateイベントに
=CarryField_FS([Form],[Screen].[ActiveControl]) を埋め込みます。
 |
| 図3-トグルボタンのAfter
Updateエベントに CarryField_FS()関数を埋め込む |
|
- 項番5-7の操作を、継承させたいテキストボックスに対して繰り返します。
- メニューからフォームビューのアイコン
をクリックしてフォームを表示させます。
- 都道府県のテキストボックスの右側に配置したトグルボタン
をクリックしてデータ継承を有効にします。
- フォーム最下位から新規レコード追加のボタン
をクリックします。
- 空のレコードが表示されますが、都道府県は直前に表示されていた内容が引き継がれています。
 |
| 図4-新規レコード追加のボタンをクリックすると都道府県のデータが引き継がれる |
|
|
Tip:
フォームの全てのフィールドを継承させたいときは継承用のコマンドボタンを作成してクリックイベントに以下のコードを追加します。
Private Sub cmdCarryAll_Click()
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70
End Sub
|
プログラムでデータの継承処理を行うにはコマンドボタンのクリックイベントに以下のコードを追加します。
Private Sub cmdCarry2All_Click()
Dim colData As New Collection
Dim ctl As Control
Dim intI As Integer
Dim intJ As Integer
Dim varData As Variant
On Error Resume Next ' DO NOT DELETE THIS LINE
' Store the Last records values to the collection
For intI = 0 To Me.Controls.Count - 1
Set ctl = Me.Controls(intI)
With ctl
Select Case .ControlType
Case acTextBox, acComboBox, acCheckBox, acOptionButton
colData.Add .Value
End Select
End With
Next intI
DoCmd.GoToRecord , , acNewRec
intJ = 0
' Populate the new record with the last records values
For intI = 0 To Me.Controls.Count - 1
Set ctl = Me.Controls(intI)
With ctl
Select Case .ControlType
Case acTextBox, acComboBox, acCheckBox, acOptionButton
intJ = intJ + 1
ctl = colData.Item(intJ)
End Select
End With
Next intI
End Sub
|