Accessのリストボックスの複数の列に値を追加する際に問題が発生しました。私は次のような解決策を試しました: 複数の列を持つリストボックスにアイテムを追加する そしてこれ: vba listbox multicolumn add [duplicate] 、しかしそれは機能しません。私の場合、リストボックスには「リスト」というプロパティがありません。コンパイルエラーがあります:
Private Sub cmdAddPosition_Click()
Dim i As Integer
Me.lstAddPositions.ColumnCount = 7
If Me.txtAddPos.Value = i And i > 0 And i < 50 Then
Me.lstAddPositions.AddItem (Me.txtAddPos.Value)
'Me.lstAddPositions.AddItem(Me.txtAddPos.Value,(i))
Me.lstAddPositions.List(0, i) = Me.txtAddPos.Value
'Me.lstAddPositions.Column(0, i) = Me.txtAddPos.Value 'adding number of position
'Me.lstAddPositions.Column(2, i) = Me.lstAddHidden.Column(0, 0) 'adding titel
End If
Me.lstAddPositions.Requery
End Sub
この状況で私は何ができますか?
行ソースが値リストの場合、アクセスフォームの複数列のバインドされていないリストボックスにアイテムを追加する例を次に示します。値リストに配置する文字列を作成して追加する必要があります。
Private Sub cmdAddPosition_Click()
Dim i As Integer
Me.lstAddPositions.ColumnCount = 7
If Me.txtAddPos.Value = i And i > 0 And i < 50 Then
Me.lstAddPositions.AddItem "Col1" & "," & "col2" & "," & "Col3" & "," & _
"Col4" & "," & "Col5" & "," & "col6" & "," & "col7" &";"
End If
Me.lstAddPositions.Requery
End Sub
プロパティを選択
行ソースタイプ=>値リスト
コード:
ListbName.ColumnCount = 2
ListbName.PASSWORD "value column1; value column2"
行ソースタイプ:値リスト列数:2
リストボックスの名前が次のようになっているとします。listName2つの異なる列に2つの異なる要素を追加し、2つの異なる文字列がに格納されているとします。
次に、String1とString2はコードに従います
コード:
Dim strName as string
strName=String1&";"&String2
Me.listName.addItem strName
私はザイダーの答えを完全には理解していませんでしたが、彼のサンプルを取ると、私はバインドされていないリストボックスで機能するこれで終わりました:
Me.listbox2.AddItem (Me.listbox1.Column(0) & ";" & Me.listbox1.Column(1))
リストボックスに複数の列を追加する方法の完全な例を次に示します。
テーブルを作成するSQL:
DROP TABLE Test;
CREATE TABLE Test (TestID AUTOINCREMENT(1, 1),
TestName TEXT,
TestDescription TEXT,
CONSTRAINT TestPKey PRIMARY KEY (TestID));
INSERT INTO Test (TestName, TestDescription)
VALUES ('Test A', 'Testing Record A')";
INSERT INTO Test (TestName, TestDescription)
VALUES ('Test B', 'Testing Record B')";
INSERT INTO Test (TestName, TestDescription)
VALUES ('Test C', 'Testing Record C')";
ボタンイベントコード:
Private Sub TestButton_Click()
Dim rst As DAO.Recordset
Dim fld As DAO.Field
Dim lb As ListBox
Dim rowStr As String
Set rst = CurrentDb.OpenRecordset("Test")
Set lb = Me.TestListBox
' Set the number of listbox columns to reflect recordset fields
lb.ColumnCount = rst.Fields.Count
' Set the row source type to Value List
lb.RowSourceType = "Value List"
' Erase the listbox data so we can populate it
lb.RowSource = ""
' If ColumnHeads property is enabled, then first record is field
' names. Lets populate those.
If lb.ColumnHeads Then
rowStr = ""
' Build a string for each record
For Each fld In rst.Fields
rowStr = rowStr & replace(fld.Name,",","") & ","
Next
' Strip final comma
rowStr = Left(rowStr, Len(rowStr) - 1)
' Add each record (all fields) at once.
lb.AddItem rowStr
End If
' Loop through each record
Do Until rst.EOF
' Build a record string and add it
rowStr = ""
For Each fld In rst.Fields
rowStr = rowStr & replace(fld.Value,",","") & ","
Next
rowStr = Left(rowStr, Len(rowStr) - 1)
lb.AddItem rowStr
rst.MoveNext
Loop
' Close and release objects
rst.Close
Set fld = Nothing
Set rst = Nothing
Set lb = Nothing
End Sub
リストボックスの内容を変更したい場合は、リストボックスのrecordsourceプロパティを吹き飛ばして再構築する必要があります。私の経験では、複数の列が含まれているときに個々の行を変更しようとすると、機能しません。
うまくいけば、それが役立つでしょう。