Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
"Requery/再クエリ" アクションを実行する前に、カレント フィールドを保存する必要があります。の件
投稿日時: 20/11/17 08:40:51
投稿者: アロハ

お世話になります。
 
フォームにタブコントロールがあり、ページの中にサブフォームを設置して、リストボックスがあるフォームを配置しております。
やりたいのは、タブコントロールを切り替えたときに、リストボックスの選択解除を行って、リクエリしたいのですが、下記のエラーがでます。
 
"Requery/再クエリ" アクションを実行する前に、カレント フィールドを保存する必要があります。
 
タブコントロールの変更時のプロシージャには
 
Me!サブフォーム1.Form.リスト1.ListIndex = -1
Me!サブフォーム1.Form.リスト1.Requery
 
又は
 
Dim vt As Variant
If Me!サブフォーム1.Form.リスト1.ItemsSelected.Count > 0 Then
        For Each vt In Me!サブフォーム1.Form.リスト1.ItemsSelected
                Me!サブフォーム1.Form.リスト1.Selected(vt) = False
        Next
    End If
Me!サブフォーム1.Form.リスト1.Requery
 
と、しています。
 
"Requery/再クエリ" アクションを実行する前に、カレント フィールドを保存する必要があります。と出ないようにするにはどうすればいいかご指導の程よろしくお願いします。

回答
投稿日時: 20/11/17 17:35:38
投稿者: Suzu

メッセージが出ない様にしたいのであれば、
強制的に レコードを保存してしまっては如何ですか?
 
DoCmd.RunCommand acCmdSaveRecord
 
ただし、そのコマンドの直前に、
保存したい対象のレコードソースのコントロール上にフォーカスを移動させてください。
サブフォームのレコードを保存移動したいのであれば、
Me!サブフォーム1.Form または その中のコントロールにフォーカスを移動させます。
  (Docmd は フォーカスのあるオブジェクトに対しての操作です)
 
ただ、その命令自体が、タブの変更時イベントであり、
サブフォーム上にフォーカスがある状態から、
メインフォーム上のコントロールであるタブへフォーカスが移動しようとしている状態で
強制的にフォーカスをサブフォーム上に戻す事になりますから、
何かしらの影響が出る可能性があります。
 
レコードソースやメイン/サブの詳細、リストボックスが連結なのか非連結なのかも判らないので、
現時点でいえる事はこの程度になります。

投稿日時: 20/11/19 22:00:40
投稿者: アロハ

Suzu様
 
ご解説ありがとうございます。
 
DoCmd.RunCommand acCmdSaveRecord
 
上記にてやりたいことはできました。
ただ、ご指摘通り他に影響がでたことと、仕様変更によってサブフォームにする必要がなくなったのでとりあえず解決しました。
 
ご丁寧にどうもありがとうございました。