在窗体access vba中将多列值添加到列表框

在窗体access vba中将多列值添加到列表框,vba,ms-access,Vba,Ms Access,我在access中向listbox中的多个列添加值时遇到问题。 我尝试过这样的解决方案:和这个:,但它不起作用。在我的例子中,Listbox没有属性“List”。我有一个编译错误: 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.lst

我在access中向listbox中的多个列添加值时遇到问题。 我尝试过这样的解决方案:和这个:,但它不起作用。在我的例子中,Listbox没有属性“List”。我有一个编译错误:

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\u Click()
作为整数的Dim i
Me.lstAddPositions.ColumnCount=7
如果Me.txtAddPos.Value=i且i>0且i<50,则
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'添加位置数
'Me.lstAddPositions.Column(2,i)=Me.lstAddHidden.Column(0,0)'
如果结束
Me.lstAddPositions.Requery
端接头

在这种情况下我能做什么?

下面是一个完整的示例,说明如何向列表框中添加多个列

要创建表,请执行以下操作:

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
如果希望更改listbox内容,则需要清除并重新生成listbox的recordsource属性。根据我的经验,当涉及多个列时,试图修改单个行是行不通的


希望这能有所帮助。

下面是一个示例,如果行源是值列表,则可以向access窗体上的多列未绑定列表框添加项。您必须通过创建一个放置在值列表中的字符串来添加它

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
Private Sub cmdAddPosition\u Click()
作为整数的Dim i
Me.lstAddPositions.ColumnCount=7
如果Me.txtAddPos.Value=i且i>0且i<50,则
Me.lstAddPositions.AddItem“Col1”和“,”和“col2”和“,”和“Col3”和“,”和_
“Col4”&“,”与“Col5”&“,”与“col6”&“,”与“col7”&”
如果结束
Me.lstAddPositions.Requery
端接头

我不太理解Zaider的答案,但以他的样本为例,我得出了一个适用于我的未绑定列表框的结论:

Me.listbox2.AddItem (Me.listbox1.Column(0) & ";" & Me.listbox1.Column(1))

选择属性

行源类型=>值列表

代码:

ListbName.ColumnCount=2

ListbName.AddItem“值列1;值列2”

首先为列表框设置以下属性 行源类型:值列表 列数:2

假设列表框的名称为:listName 假设您想在两个不同的列中添加两个不同的元素,并在中存储两个不同的字符串

String1和String2然后按照代码进行操作

代码:


你看到了吗?找到
.List(.ListCount-1,1)=TextBox2.Value
并进行更改以适应您的情况?我仍然对.List有问题,现在甚至对.ListCount也有问题,因为第一个方法不存在,即使在这个列表的方法列表上,我也不能选择这个方法,第二个错误是。ListCount:无效或不合格的referenceDoesn不是我,在您的情况下,必须介于0和6之间?您只有7列,因此只能从列表(0,0)转到列表(0,6)。变量i用于行,它是我可以拥有的最大行数,在一次执行中,此i仅作为一个值。请看ScaryJim的回答:
Dim strName as string
strName=String1&";"&String2
Me.listName.addItem strName