Excel VBA を使って、Accessのデータを検索したい。
除外テーブルには「管理ID」レコードが在り、ユニークな番号を登録してあります。
やりたいことは、除外テーブルの管理IDに在るであろう、"E003"の有無を確認したいと思います。
作ってみたソースコードは、以下の通り。
Private Sub aSearch_Click()
DB.TableOpen ("db_name.mdb") 'Accessのファイル
DB.FindRecode ("E003") ' 検索対象文字列
DB.TableClose
End Sub
------------------------------ここから、標準モジュール
Public adoCn As ADODB.Connection
Public adoRs As ADODB.Recordset
Public fSql As String
Public fRow As Integer
'データ ソースへの接続と、レコードセットへの接続
Sub TableOpen(ByVal mdb_name As String)
Set adoCn = New ADODB.Connection 'データ ソースへの接続
adoCn.Provider = "Microsoft.Jet.OLEDB.4.0" 'Accessへ接続プロバイダ名
adoCn.Open mdb_name '接続するmdbファイル名"
fSql = "select 管理ID from 除外テーブル"
Set adoRs = New ADODB.Recordset 'レコードセットへの接続
adoRs.Open fSql, adoCn, adOpenKeyset, adLockReadOnly 'クエリーの実行
' adoRs.Open "除外テーブル", adoCn, adOpenKeyset, adLockReadOnly 'クエリーの実行
End Sub
'レコード(管理ID)の検索
Function FindRecode(ByVal findName As String) As String
adoRs.Find adoRs.Fields("管理ID") & "=" & findName '← ここでエラーとなる
If adoRs.RecordCount = 0 Then
MsgBox "該当するレコードは存在しません"
FindRecode = ""
Exit Function
Else
Do ' Doループは、要らないかも???
Debug.Print adoRs.Fields("管理ID") & "/" & adoRs.Fields("登録日")
adoRs.MoveNext
Loop Until adoRs.EOF
End If
FindRecode = adoRs.Fields("管理ID")
End Function
'データ ソースへの接続と、レコードセットを切断する
Sub TableClose()
adoRs.Close 'クエリーを閉じる
adoCn.Close 'データ接続を閉じる
Set adoRs = Nothing
Set adoCn = Nothing
End Sub
------------- ここまで
データのソースから、検索する方法が良く判っておらず、Open / find の使い方はこれで良いのでしょうか。
以上、よろしくお願いします。
ご回答を戴きまして、誠に有難うございます。
この方法ですと、adoRs.EOFにデータの有無を調べるだけで、"E003"を調べません。
"S003"と入力をして、Trueになるはず(データには存在しません)がFalseになってしまいます。
つまり、Do - Loop で該当する"E003"の確認をすることになるのでしょうか?
Function FindRecode(ByVal findName As String) As String
fSql = fSql & " where 管理ID='" & findName & "'" 'レコードセット
If adoRs.EOF = True Then
MsgBox "該当するレコードは存在しません"
FindRecode = ""
Exit Function
Else
MsgBox "該当するレコードを、発見!!"
Do
Debug.Print adoRs.Fields("管理ID")
adoRs.MoveNext
Loop Until adoRs.EOF
End If
FindRecode = adoRs.Fields("管理ID")
End Function
私の解釈が間違っていたら、指摘してください。
補足
ご回答を戴きまして、誠に有難うございます。 この方法ですと、adoRs.EOFにデータの有無を調べるだけで、"E003"を調べません。 "S003"と入力をして、Trueになるはず(データには存在しません)がFalseになってしまいます。 つまり、Do - Loop で該当する"E003"の確認をすることになるのでしょうか? Function FindRecode(ByVal findName As String) As String fSql = fSql & " where 管理ID='" & findName & "'" 'レコードセット If adoRs.EOF = True Then MsgBox "該当するレコードは存在しません" FindRecode = "" Exit Function Else MsgBox "該当するレコードを、発見!!" Do Debug.Print adoRs.Fields("管理ID") adoRs.MoveNext Loop Until adoRs.EOF End If FindRecode = adoRs.Fields("管理ID") End Function 私の解釈が間違っていたら、指摘してください。