Access (VBA)

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

 
(Windows 8 : Access 2013)
同一番号の連続確認
投稿日時: 17/06/05 20:18:34
投稿者: 丘珠

検索で下記コードで検索しておりますが、同一番号がある場合一つ目は検索できますが次が検索できません。
 
 
Private Sub コンボ231_AfterUpdate()
' コントロールの値と一致するレコードを検索する
Dim rs As Object
 
Set rs = Me.Recordset.Clone
rs.FindFirst "AB番号 ='" & テキストボックス1の値 & "' OR 受付番号 ='" & テキストボックス2の値 & "' OR 登録番号 ='" & テキストボックス2の値 & "’”
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
 
(受付番号で検索した場合)
AB番号    受付番号    登録番号
123    5555   1234567←1回目は検索できます
124    2999   2468022
125    5555   1313121←2つ目のデータへ移りません
 
よろしくお願いします

回答
投稿日時: 17/06/05 21:07:32
投稿者: Suzu

こんにちは。
 
元々検索は、該当するレコード1件を選択します。
仮に複数該当したとして、どういう動作で表示したいのでしょうか。
 
現在のコードは、コンボボックスの更新後処理です。
このイベントで、テキストボックスの値に合致するレコードをカレントレコードにしています。
 
複数該当する場合、VBAではFindNextを使います。
しかしそれは、次々とカレントレコードを移動させる事になります。
ユーザーには目にもとまらぬ速さでカレントレコードが移動する事になります。
 
それとも、何かのアクションをもって、カレントレコードを移動させるのでしょうか。
 
或いは、【検索】ではなくて、【抽出】(該当するレコードのみを表示する)なのでは?
その場合は、Find〜 を使うのではなく Filter を使いましょう。

回答
投稿日時: 17/06/05 21:09:40
投稿者: hatena
投稿者のウェブサイトに移動

FindFirst は一致する最初のレコードを検索するので、最初のレコードから移動しません。
次のレコードを検索したい場合は、FindNext を使いましょう。
さらに、Recordset.Clone はレコードセットのコピーを作成することになりますので、コピーした時点でカレントレコードは先頭になります。ですので、FindNext を使っても最初のレコードにしか移動しません。レコードセットのカレントレコードをフォームのカレントレコードと一致させる処理が必用になります。
 
その他、現状のコードを活かして、添削すると下記のようになります。
 

Private Sub コマンド15_Click()
    Dim rs As DAO.Recordset

    Set rs = Me.Recordset.Clone
    rs.Bookmark = Me.Bookmark 'カレントレコードをフォームと一致させる
    rs.FindNext "条件式"
    If rs.NoMatch Then
        MsgBox "一致するレコードはこれ以降にはありません。"
    Else
        Me.Bookmark = rs1.Bookmark    
    End If
End Sub

 
ただし、Recordset.Clone でコピーを作成せずに、フォームのレコードセット(Me.Recordset)に対して直接操作すれば、もっとシンプルに記述できます。
 
Private Sub コマンド15_Click()
    Dim rs As DAO.Recordset

    Set rs = Me.Recordset
    rs.FindNext "条件式"
    If rs.NoMatch Then
        MsgBox "一致するレコードはこれ以降にはありません。"
    End If
End Sub

 
Bookmark でカレントを一致させるコードが不要になります。

回答
投稿日時: 17/06/06 01:51:40
投稿者: hatena
投稿者のウェブサイトに移動

よく見たら、コンボボックスの更新ご処理ですね。
 
だとしたら、Suzuさんの回答を参考にしてください。
 
検索でなく抽出の方が私も適していると思います。Filterプロパティを使うといいですね。

投稿日時: 17/06/06 10:32:16
投稿者: 丘珠

みなさんアドバイスありがとうございます。
 Filterについていろいろ試しましたがうまくいきません。
もう一堀アドバイスをお願いします。

投稿日時: 17/06/06 12:06:39
投稿者: 丘珠

自力解決しました。
みなさんありがとうございました。