直前に入力したデータを新規登録するレコードに引き継ぐには

レコードの新規登録で、直前に入力したデータと同じデータを繰り返して入力することがよくあります。このような場合、直前に入力したデータをフィールド(項目)別に選択して新規登録するレコードに引き継ぐことができれば入力作業の負荷が軽減されます。入力データの引継ぎは、ライブラリーデータベース(MyLib98|MyLib97)に登録されている CarryField_FS()関数を利用することにより実現することができます。

CarryField_FS()関数を組み込む手順:

  1. Access97を起動してサンプルデータベース Northwind.mdb を開きます。

  2. データベースウインドウからフォームタブをクリックして新規作成ボタンをクリックします。

  3. フォームの新規作成ダイアログから得意先テーブルを選択します。次に、オートフォーム:単票形式を選択してOKをクリックします。

  4. 得意先のフォームが表示されたら、フォームデザインのアイコンIcon_Design.gif (127 バイト)をクリックしてデザインモードに切り替えます。

  5. ツールボックスを表示させて、継承させたいテキストボックス(例えば、都道府県)の右側にトグルボタン(またはチェックボックス)を配置します。
    Forms_Beginner_004_fig1.gif (518 バイト)
    図1-オートフォームで作成したフォームの都道府県の右側にトグルボタンを配置
  6. トグルボタンのタグプロパティに継承させたいテキストボックスのコントロール名(例えば、都道府県)を入力します。
    Forms_Beginner_004_fig2.gif (3341 バイト)
    図2-トグルボタンのTagプロパティに継承させたいコントロール名を設定
  7. トグルボタンのAfter Updateイベントに =CarryField_FS([Form],[Screen].[ActiveControl]) を埋め込みます。
    Forms_Beginner_004_fig3.gif (3308 バイト)
    図3-トグルボタンのAfter Updateエベントに CarryField_FS()関数を埋め込む
  8. 項番5-7の操作を、継承させたいテキストボックスに対して繰り返します。

  9. メニューからフォームビューのアイコンIcon_Forms.gif (895 バイト)をクリックしてフォームを表示させます。

  10. 都道府県のテキストボックスの右側に配置したトグルボタンIcon_ToggleButton.gif (96 バイト)をクリックしてデータ継承を有効にします。

  11. フォーム最下位から新規レコード追加のボタンIcon_Add.gif (122 バイト)をクリックします。

  12. 空のレコードが表示されますが、都道府県は直前に表示されていた内容が引き継がれています。
    Forms_Beginner_004_fig4
    図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