Ich habe Probleme beim Hinzufügen von Werten zu mehreren Spalten in der Listbox in access. Ich habe eine Lösung wie die folgende versucht: Hinzufügen von Elementen in einer Listbox mit mehreren Spalten und diese: vba Listbox mehrspaltig hinzufügen , aber es funktioniert nicht. Listbox hat in meinem Fall keine Eigenschaft "List". Ich habe einen Kompilierungsfehler:
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
Was kann ich in dieser Situation tun?
Hier ein Beispiel für das Hinzufügen von Elementen zu einem ungebundenen mehrspaltigen Listenfeld auf einem Zugriffsformular, wenn die Zeilenquelle eine Werteliste ist. Sie müssen es hinzufügen, indem Sie eine Zeichenfolge erstellen, die Sie in eine Werteliste einfügen.
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
Hier ein vollständiges Beispiel, wie Sie einer Listbox mehrere Spalten hinzufügen können.
SQL zum Erstellen der Tabelle:
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')";
Button Ereigniscode:
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
Wenn Sie den Inhalt der Listbox ändern möchten, müssen Sie die Recordsource-Eigenschaft der Listbox neu erstellen. Meiner Erfahrung nach, der Versuch, einzelne Zeilen zu ändern, wenn mehrere Spalten beteiligt sind, funktioniert nie.
Hoffentlich hilft das aus.
Propety auswählen
Zeilenquellentyp => Werteliste
Code:
ListbName.ColumnCount = 2
ListbName.AddItem "Wert Spalte1; Wert Spalte2"
Zeilenquellentyp: Werteliste Spaltenanzahl: 2
Angenommen, der Name des Listenfelds lautet: listenname Angenommen, Sie möchten zwei verschiedene Elemente in zwei verschiedenen Spalten hinzufügen, und zwei verschiedene Zeichenfolgen werden in gespeichert
String1 und String2 folgen dann dem Code
Code:
Dim strName as string
strName=String1&";"&String2
Me.listName.addItem strName
Ich habe Zaiders Antwort nicht ganz verstanden, aber als ich seine Probe nahm, endete dies mit dem Ergebnis für meine ungebundene Listbox:
Me.listbox2.AddItem (Me.listbox1.Column(0) & ";" & Me.listbox1.Column(1))