2

名前のリストをAccessVBAのコンボボックスコントロールに割り当てようとしています。

私の問題は、名前の出力文字列が正しくないことです。

これが私のコードです:

Private Sub command186_click()
    Dim firstName As String
    Dim lastName As String
    Dim rst As Object
    Dim rowSourceText As String
    Dim fullName As String

    Set rst = CurrentDb.OpenRecordset("Pool_Contact")

    Do While Not rst.EOF
        firstName = rst("FName").Value
        lastName = rst("LName").Value
        fullName = firstName + " " + lastName
        rst.MoveNext
    Loop

    Forms(FrmDaysAvailable).Controls("Combo202").rowSource = fullName
    Debug.Print fullName
End Sub

エラーがループ内のどこかにあることを知っています。ここでは、変数fullNameが2番目の結果によって上書きされます。

このループを修正して、fullName、fullName、fullName..のような文字列を生成するにはどうすればよいですか。

ご協力ありがとうございます

4

2 に答える 2

5

これははるかに簡単です。

 Forms(FrmDaysAvailable).Controls("Combo202").rowSource = _
           "SELECT ID, FName & ' ' & LName FROM Pool_Contact"

または

Forms!FrmDaysAvailable.Combo202.rowSource = _
           "SELECT ID, FName & ' ' & LName FROM Pool_Contact"

または

Me.Combo202.rowSource = "SELECT ID, FName & ' ' & LName FROM Pool_Contact"

さらに、連結には+ではなく&を使用します。プラス(+)を使用すると、nullに関する問題が発生します。

于 2012-08-14T15:20:05.777 に答える
4

各アイテムをComboBoxに追加する必要があります。代わりに、最後のアイテムのみを追加します。

Do While Not rst.EOF
    firstName = rst("FName").Value
    lastName = rst("LName").Value
    fullName = firstName & " " & lastName
    Me!Combo202.AddItem(fullName)
    rst.MoveNext
Loop

rstまた、オブジェクトとしてではなく宣言する必要がDAO.Recordsetあります。(DAO dllへの参照を追加する必要がある場合があります)。

オプションで、テーブルまたはクエリをComboBoxの行ソースに直接割り当てて、ループを完全に削除できます。

Me!Combo202.RowSource = "Pool_Contact"

ただし、フォームデザイナでこれを行うことができ、VBAで行う必要はまったくありません。ComboBoxの内容を更新する必要がある場合は、次のように記述できます。

Me!Combo202.Requery

注:それForms(FrmDaysAvailable)が現在の形式だと思います。その場合は、を使用して簡単に対処できますMe。さらに、Controlsコレクションはフォームのデフォルトのプロパティです。Forms(FrmDaysAvailable).Controls("Combo202")VBAコレクションアクセス演算子に単純化することMe("Combo202")Me!Combo202、VBAコレクションアクセス演算子を使用することもできます!

また、ComboBox(およびその他のコントロール)に。のような意味のある名前を付けることをお勧めしますcboFullName。これにより、コードが読みやすくなります。私は通常、接頭辞「q」が付いた同じ名前のComboBoxに対応するクエリを作成し、qcboFullNameこれをプロパティウィンドウのコンボのRowSourceに割り当てます。クエリには、「ORDER BY」を適用して、ComboBoxに必要な列を正確に選択できるという利点があります。

通常、ユーザーの選択と表示用の文字列列の結果として、非表示のID列(列幅プロパティに0を入力)があります。

SELECT PersonID, firstName & ' ' & lastName AS Display
FROM tblPerson
ORDER BY firstName, lastName 
于 2012-08-14T15:19:34.013 に答える