|
▼爺 さん:
お節介だとは思われますが、気づいた点をいくつか上げさせて頂きます。
>Dim name As String
VBAには「name」というプロパティ(ヘルプでNameで検索すると出て来ると思われます)が
存在するため、誤動作を防ぐためにも違う名前の変数にした方が良いと思われます。
>Dim no As Integer
上記と同じ理由で「Yes」「No」の「No」に間違われる可能性があります。
>name = ([Forms]![F_003Search]![コンボ5])
→ name = ([Forms]![F_003Search]![コンボ5].Value)
>moji = moji & fld & " "
→ moji = moji & fld.Value & " "
[コンボ5]、fld は省略された形であるので、[コンボ5]、 fld の何を使いたいのかを
明記するのを癖付けすると良いと思います。
>Set rs = New ADODB.Recordset
>rs.Open
「cn」 に対して行っているのと同様に、「rs」に対しても「Close」「Set rs = Nothing」と
オブジェクトの解放を行いましょう。
コードが終了しても自動的にオブジェクトが解放されるないものが存在する為です。
基本的には「Set」に対して「Nothing」で、「Open」に対して「Close」を行うのが良いと
思われます。
>あります。氏名(1)です。すみませんでした。
テーブルやフィールドの名前に記号をつけるのも避けたほうが無難かもしれません。
仮に「担当者」という名前のフィールドですと
>>rs.Find "[担当者] = '" & name & "'", no
>>rs.Find "担当者 = '" & name & "'", no
とどちらでも作動するコードが、氏名(1)ですと
>>rs.Find "[氏名(1)] = '" & name & "'", no
>>rs.Find "氏名(1) = '" & name & "'", no
下の方はエラーとなってしまいます。
「以下は自分だったらたこうする!」というコードです。
Find を用いずに Filter で担当者を抽出しております。
Public Sub 案件検討検索1()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim namae As String
Dim moji As String
Set cn = Application.CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "T_003案件検討", cn, adOpenStatic, adLockReadOnly
namae = [Forms]![F_003Search]![コンボ5].Value
rs.Filter = "[氏名(1)] = '" & namae & "'"
Do Until rs.EOF
moji = ""
For Each fld In rs.Fields
moji = moji & fld.Value & " "
Next
Debug.Print moji
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
|
|