2

VBA を使用して、フィールド"Service"の"ServiceYES"というテーブルで"CHIR"などのテキスト文字列を検索するにはどうすればよいですか。

その後、テーブル"ServicesYES"に"CHIR"が存在するすべての行の隣接フィールドを保存したいと思います。「ServiceYES」テーブルは次のとおりです。

ServiceYES テーブル

私は基本的に、「サービス」列のすべての「CHIR」を見つけて、CHIR の左側にある名前、たとえば「FRANKL_L」「SANTIA_D」を配列として保存したいと考えています。

事前にご協力いただきありがとうございます。

4

3 に答える 3

3

まず、クエリを作成しSELECTます。

SELECT Code_Perso
FROM ServicesYES
WHERE Service = 'CHIR';

SELECT DISTINCT Code_Perso一意の値のみが必要な場合に使用します。

ORDER BY Code_Persoアルファベット順に並べたい場合は追加してください。

満足のいくクエリが得られたら、そのクエリに基づいて DAO レコードセットを開き、Code_Perso返される値をループします。

それらを最終配列に直接ロードする必要はありません。コンマ区切りの文字列に追加する方が簡単な場合があります。その後、この関数を使用してSplit()(Access バージョン >= 2000 を使用していると仮定)、配列を作成できます。

開始するためのサンプル コードを次に示します。ほとんどは標準的なボイラープレートですが、実際には機能する可能性があります...「yourquery」を指定すると。

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strItems As String
Dim varItems As Variant
Set db = CurrentDb
Set rs = db.OpenRecordset("yourquery", dbOpenSnapshot)
With rs
    Do While Not .EOF
        strItems = strItems & "," & !Code_Perso
        .MoveNext
    Loop
    .Close
End With
If Len(strItems) > 0 Then
    ' discard leading comma '
    strItems = Mid(strItems, 2)
    varItems = Split(strItems, ",")
Else
    MsgBox "Oops.  No matching rows found."
End If
Set rs = Nothing
Set db = Nothing
于 2012-08-29T18:36:01.893 に答える
2

私はこれをテストしましたが、うまくいくようです。この関数は、ServiceYes='CHIR' であるすべてのレコードをプルし、Code_Person 値を配列にダンプして返します。

Function x() As String()
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset( _
         "Select * from ServiceYES where Service='CHIR'")

    Dim Arr() As String
    Dim i As Integer

    While rst.EOF = False
         ReDim Preserve Arr(i)
         Arr(i) = rst.Fields("Code_Person")
         i = i + 1
    rst.MoveNext
    Wend
    x = Arr
End Function

サンプル使用法:

Debug.Print x()(0)
于 2012-08-29T18:45:05.477 に答える
1

パオロ

これが私が数分でまとめたものです。モジュール内の VBA エディターに追加できます。トリックを使用して、RecordCount プロパティが適切に動作するようにします。配列を返す場合は、関数を更新して呼び出しルーチンを作成できます。そのコードが必要な場合は、コメントを投稿してください。

ありがとう!

Option Compare Database

Function QueryServiceYES()
    Dim db As Database
    Dim saveItems() As String

    Set db = CurrentDb

    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("SELECT Code_Perso, Service, Favorites " & _
                                "FROM ServiceYES " & _
                                "WHERE Service = 'CHIR'")

    'bug in recordset, MoveFirst, then MoveLast forces correct invalid "RecordCount"
    rs.MoveLast
    rs.MoveFirst

    ReDim Preserve saveItems(rs.RecordCount) As String

    For i = 0 To rs.RecordCount - 1
        saveItems(i) = rs.Fields("Code_Perso")

        rs.MoveNext
    Next i

    'print them out
    For i = 0 To UBound(saveItems) - 1
        Debug.Print saveItems(i)
    Next i

    rs.Close
    Set rs = Nothing

    db.Close
    Set db = Nothing
End Function
于 2012-08-29T19:01:02.383 に答える