J'ai un problème avec l'ajout de valeurs à plusieurs colonnes dans listbox en accès. J'ai essayé une solution comme celle-ci: Ajout d'éléments dans une listbox à plusieurs colonnes et ceci: vba listbox multicolumn add [duplicate] , mais ça ne marche pas. Listbox dans mon cas n'a pas de propriété "Liste". J'ai une erreur de compilation:
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
Que puis-je faire dans cette situation?
Voici un exemple d'ajout d'éléments à une zone de liste non liée à plusieurs colonnes d'un formulaire d'accès si la source de la ligne est une liste de valeurs. Vous devez l'ajouter en créant une chaîne que vous placez dans une liste de valeurs.
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
Voici un exemple complet de la façon dont vous pouvez ajouter plusieurs colonnes à une zone de liste.
SQL pour créer la table:
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')";
Bouton Code d'événement:
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
Si vous souhaitez modifier le contenu de la zone de liste, vous devez supprimer et reconstruire la propriété recordsource de la zone de liste. D'après mon expérience, essayer de modifier des lignes individuelles lorsque plusieurs colonnes sont impliquées - ne fonctionne jamais.
Espérons que cela aide.
sélectionnez la propriété
Type de source de ligne => Liste de valeurs
Code:
ListbName.ColumnCount = 2
ListbName.AddItem "valeur column1; valeur column2"
Type de source de ligne: liste de valeurs Nombre de colonnes: 2
Supposons que le nom de la list box soit: listName Supposons que vous vouliez ajouter deux éléments différents dans deux colonnes différentes et que deux chaînes différentes soient stockées dans
String1 et String2 puis suivez le code
Code:
Dim strName as string
strName=String1&";"&String2
Me.listName.addItem strName
Je ne comprenais pas très bien la réponse de Zaider, mais en prenant son échantillon, je me suis retrouvé avec ceci qui a fonctionné pour ma liste déroulante non liée:
Me.listbox2.AddItem (Me.listbox1.Column(0) & ";" & Me.listbox1.Column(1))