Microsoft Access 掲示板

ACCESSのVBAについて、ひとつのテキストボックスで複数フィールドの検索をしたい

5 コメント
views
4 フォロー

ACCESS2016 Windows10を使っています。

Private Sub コマンド19_Click()

Dim SearchValue As String '検索値格納変数
Dim Rst As DAO.Recordset 'レコードセット

'
SearchValue = Me.検索
Set Rst = Me.RecordsetClone
Rst.MoveFirst

If IsNumeric(Left(SearchValue, 2)) Then

Rst.FindFirst "[電話番号] = '" & SearchValue & "'"

If Rst.NoMatch Then
GoTo SearchFailer:
Else
GoTo SearchSuccess:
End If
Else
'
Rst.FindFirst "[名前] = '" & SearchValue & "'"

If Rst.NoMatch Then

Rst.FindFirst "[会社名] = '" & SearchValue & "'"

If Rst.NoMatch Then
GoTo SearchFailer:
Else
GoTo SearchSuccess:
End If
Else
GoTo SearchSuccess:
End If
End If

SearchSuccess:
Me.Bookmark = Rst.Bookmark
Me.名前.SetFocus
GoTo Sub_Exit:

SearchFailer:
MsgBox "検索に失敗しました" & vbCrLf &
"もう一度検索値を入力してください"

, vbInformation + vbOKOnly, "検索失敗"
Me.検索 = Null
Me.検索.SetFocus
GoTo Sub_Exit:

Sub_Exit:
Rst.Close
Set Rst = Nothing

End Sub

Rst.MoveFirst⇒ここの部分で、カレントレコードがありませんとなります。
ネットでエラーを検索しましたが、修正をすることができませんでした。

お手数ですが、ご教示していただけないでしょうか?

naonao
作成: 2019/08/26 (月) 10:11:02
通報 ...
1

Rst.MoveFirst⇒ここの部分で、カレントレコードがありませんとなります。

フォームにレコードは表示されてますか。レコード件数が0だとそのエラーになりますが。

下記のようにしてみては。

If Rst.EOF Then
    MsgBox "レコードがありません。"
    Exit Sub
Else
    Rst.MoveFirst
End If
2
naonao 2019/08/26 (月) 12:37:15 56d3d@0d7bf

フォームにレコードは表示されていません。

If Rst.EOF Then
    MsgBox "レコードがありません。"
    Exit Sub
Else
    Rst.MoveFirst
End If

上記を記載しても同じエラーになります。

3
naonao 2019/08/26 (月) 12:40:08 56d3d@0d7bf

このコードは、テーブルを指定しないと動かないのでしょうか?
MT_名簿を検索しています

4

そのような疑問が出るということは、どこからのコードをそのままコピペして使用しいるのだと思いますが、
それぞれのコードの意味をまずは理解してください。

そのコードのやっていることはフォームのレコードソースのデータを対象に検索するというコードです。
フォームにレコードがなければ検索できるはずかありません。

また、その前に、何をしたいのか分析しましょう。その目的に合致した方法を選ぶ必要があります。

「検索」とは複数のレコードが表示されていて、条件に合致するレコードへ移動するということです。

フォームに最初はレコードは表示してなくて、条件に合致するレコードを表示するのは「抽出」です。

やりたいことは、あるいは目的に合致するのは「検索」か「抽出」のどちらですか。それをまず検討してください。

5
naonao 2019/08/26 (月) 13:33:40 56d3d@0d7bf

ご指摘ありがとうございました。いつも参考になる回答をありがとうございます。