【问题标题】:Filling array with listbox multiple selected items用列表框填充多个选定项目的数组
【发布时间】:2018-08-02 12:50:21
【问题描述】:

我之所以分享我的代码,是因为在网上找到的其他代码要么不起作用,因为它是为 excel 创建的而不是访问,因为语法有点不同,或者缺少所需的关键功能,这是基于多选。

也就是说...此代码执行以下操作:

拥有一个作为行源的列表框是查询结果,代码只需将列表框中的多个选定项放入一个数组中,以便在以后的代码中使用。

excel与access的区别是.list在excel中工作,.Column(0, i)在access中工作

Dim i As Integer
Dim x As Variant
Dim MultiArr()

If Me.lbMultiEdit.ListIndex <> -1 Then
    For i = 0 To Me.lbMultiEdit.ListCount - 1
        If Me.lbMultiEdit.Selected(i) Then
            ReDim Preserve MultiArr(x)
            MultiArr(x) = Me.lbMultiEdit.Column(0, i)
            x = x + 1
        End If
    Next i
End If

'sanity check....
For i = 0 To x - 1
    MsgBox MultiArr(i)
Next i

【问题讨论】:

  • 请删除答案并编辑您的问题以包含代码。否则答案将被删除……因为它不是答案……我们将没有代码!
  • 做了,感谢您的意见

标签: arrays excel ms-access vba


【解决方案1】:

您的代码未优化。它为添加的每个项目调整数组的大小。 ReDim Preserve 是一个非常密集的操作,因为它本质上是创建一个所需大小的新数组,然后将所有项目移过来。

更优化的变体,从不使用ReDim Preserve

Dim i As Integer
Dim x As Variant
Dim MultiArr()

If Me.lbMultiEdit.ItemsSelected.Count = 0 Then Exit Sub 'No items selected
ReDim MultiArr(0 To Me.lbMultiEdit.ItemsSelected.Count - 1)

If Me.lbMultiEdit.ListIndex <> -1 Then 'Why?
    For i = 0 To Me.lbMultiEdit.ListCount - 1
        If Me.lbMultiEdit.Selected(i) Then
            MultiArr(x) = Me.lbMultiEdit.Column(0, i)
            x = x + 1
        End If
    Next i
End If

【讨论】:

    【解决方案2】:

    您可以仅遍历所选项目,而不是遍历所有项目并测试每个项目是否被选中,例如:

    Dim i As Integer, v, MultiArr()
    ReDim MultiArr(0 To Me.lbMultiEdit.ItemsSelected.Count - 1)
    
    For Each v In Me.lbMultiEdit.ItemsSelected
        MultiArr(i) = Me.lbMultiEdit.ItemData(v)
        i = 1 + i
    Next v
    

    或者,使用With 语句:

    Dim i As Integer, v, MultiArr()
    
    With Me.lbMultiEdit
        ReDim MultiArr(0 To .ItemsSelected.Count - 1)
        For Each v In .ItemsSelected
            MultiArr(i) = .ItemData(v)
            i = 1 + i
        Next v
    End With
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多