ms access vba DoCmd.GoToRecord , , acNewRec 03 レコードの有無を確認してから保存

 ms accessでテーブルとそこに格納するフィールドを定義して、

そのレコードを登録するためのフォームを作成したとき、

そのフォームにはテーブルの列の値を入力するテキストボックスと、

ボタン1  ボタン2があって、


ボタン1押下で

DoCmd.GoToRecord , , acNewRec


が実行され、


ボタン2押下で

DoCmd.Saveが実行されるとします。


フォームに必要な項目を入力し、

ボタン2で保存しようとするとき、


vbaのコードのほうで、


テーブルにレコードがない場合は,まず、


DoCmd.GoToRecord , , acNewRec


を実行する、


そのあと、本来の保存の処理を行う、

という処理にしたいときは、

どのようなコードになるのでしょうか?

テーブルにレコードがない場合に新しいレコードを作成し、

その後に保存する処理を

VBAで実装するためのサンプルコードを以下に示します。


このコードは、ボタン2押下時に

テーブルにレコードがない場合に新しいレコードを作成し、


その後に保存する処理を行います。


```vba


Private Sub CommandButton2_Click()

    ' 変数宣言

    Dim rst As DAO.Recordset

    

    ' テーブルのレコードセットを開く

    Set rst = CurrentDb.OpenRecordset(

"YourTableName", dbOpenDynaset)

    

    ' テーブルにレコードが存在しない場合

    If rst.RecordCount = 0 Then

        ' 新しいレコードを作成

        DoCmd.GoToRecord , , acNewRec

    End If

    

    ' 現在のレコードを保存

    DoCmd.RunCommand acCmdSaveRecord

    

    ' 後処理

    rst.Close

    Set rst = Nothing


End Sub


```

このコードでは、まずレコードセットを開き、

テーブルにレコードが存在しない場合に


`DoCmd.GoToRecord , , acNewRec`


を実行して新しいレコードを作成します。

その後、

`DoCmd.RunCommand acCmdSaveRecord`

を使用して現在のレコードを保存します。


テーブル名を`YourTableName`に置き換えて使用してください。

また、必要に応じてエラーハンドリングを追加することをお勧めします。


いかがでしょうか?他にも質問があれば教えてください。



コメント