1

MS Access DB があり、リストボックスで複数の項目を選択するためのフォームを作成しました。パイプを使用してデータベースに保存しています | 区切り記号。私が抱えている問題は、誰かがフォームを変更する必要があるときです。リストボックスに通常の値を入力し、データベースからのプルに基づいてアイテムを選択する必要があります。

現在、DB から取得したレコードを分割するところから始めていますが、その後は迷子になります。

temps = Split(records("Pillar"), "|")

For Eachステートメントを実行する必要があることはわかっていますが、わかりません。私はやってみました...

For Each varItem In temps
    Pillar.ItemData(0) = varItem
Next

しかし、それはうまくいきません。これは、私が使用できる他の唯一の適切な値とほぼ同じですがPillar.ItemsSelected、それを行うと読み取り専用エラーが発生します。

4

1 に答える 1

0

で区切られた数字records("Pillar")の文字列を取得します。|次にSplit()、その文字列を配列にします。ポイントは、値がそれらの配列メンバーの 1 つと一致する各リスト ボックス行を選択することです。

ただし、実際には配列は必要ないと思います。|その文字列の先頭と末尾にa を追加し、文字でInStr()囲まれたリスト ボックスの値|が改訂された文字列に存在するかどうかを確認するために使用する方が簡単です。

その説明はおそらく理解するのが難しかったでしょう。Immediate のこの例でそれが明確になるかどうかを確認してください。

cstrPillar = "1|2|3"
? "|" & cstrPillar & "|"
|1|2|3|
strListBoxValue = "3"
? "|" & strListBoxValue & "|"
|3|
? InStr(1, "|" & cstrPillar & "|", "|" & strListBoxValue & "|")
 5 

それが理にかなっている場合は、コマンド ボタンのクリック イベントに適用する方法を次に示します。cstrPillarで動的に取得する文字列のプロキシとして、文字列定数 を使用していることに注意してくださいrecords("Pillar")。そして、複数選択リスト ボックスに という名前を付けましたlstPillar

Private Sub cmdSelectRows_Click()
    Const cstrPillar As String = "1|2|3"
    Dim i As Long
    For i = 0 To (Me.lstPillar.ListCount - 1)
        Me.lstPillar.Selected(i) = ( _
            InStr(1, _
                "|" & cstrPillar & "|", _
                "|" & Me.lstPillar.ItemData(i) & "|") > 0)
    Next
End Sub

そのクリック イベントの効果は、1、2、または 3 に一致するリスト ボックスの行を選択し、他のすべての行の選択を解除することです。

私はそのMe.lstPillar.Selected(i)声明が挑戦的であるかもしれないことを理解しています. 私が提案できる最善の方法は、イミディエイト ウィンドウの例に戻って参照し、それが十分に明確になることを願うことです。

于 2013-10-11T20:31:39.040 に答える