【问题标题】:Adding values multiple columns to listbox in form access vba在表单访问vba中将值多列添加到列表框
【发布时间】:2020-07-12 15:53:21
【问题描述】:

我在向访问列表框中的多个列添加值时遇到问题。 我试过这样的解决方案:Adding items in a Listbox with multiple columns 和这个: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

在这种情况下我该怎么办?

【问题讨论】:

  • 你见过this walkthrough 吗?找到.List(.ListCount - 1, 1) = TextBox2.Value 并根据您的情况进行更改?
  • 我仍然对 .List 有问题,现在甚至使用 .ListCount,因为第一种方法不存在,即使在此列表的方法列表中我也无法选择此方法,第二个错误是对于 .ListCount:无效或不合格的引用
  • 在你的情况下,我不是必须在 0 到 6 之间吗?你只有 7 列,所以你只能从 List(0, 0) 转到 List(0, 6)。
  • 变量 i 用于行,它是我可以拥有的最大行数,并且在一次执行期间,这 i 只是一个值。
  • 在这里看看 ScaryJim 的回答:forums.hexus.net/programming-web-development/…

标签: vba ms-access


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    首先为列表框设置以下属性

    行源类型:值列表 列数:2

    假设列表框的名称是:listName 让我们假设你想在两个不同的列中添加两个不同的元素,并且两个不同的字符串存储在

    String1 和 String2 然后跟着代码

    代码:

    Dim strName as string
    strName=String1&";"&String2
    Me.listName.addItem strName
    

    【讨论】:

      【解决方案3】:

      选择属性

      行源类型 => 值列表

      代码:

      ListbName.ColumnCount=2

      ListbName.AddItem "value column1;value column2"

      【讨论】:

        【解决方案4】:

        我不太明白 Zaider 的回答,但以他的样本我最终得到了这个对我的未绑定列表框有用的:

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

        【讨论】:

          【解决方案5】:

          这是一个完整示例,说明如何将多个列添加到列表框。

          创建表的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
          

          如果您想更改列表框的内容,您需要删除并重建列表框的记录源属性。以我的经验,在涉及多列时尝试修改单个行 - 永远行不通。

          希望对您有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多