访问 VBA 是不是有 Listbox.List 方法,因为 excel VBA 有

Posted

技术标签:

【中文标题】访问 VBA 是不是有 Listbox.List 方法,因为 excel VBA 有【英文标题】:Does access VBA has Listbox.List method as excel VBA has访问 VBA 是否有 Listbox.List 方法,因为 excel VBA 有 【发布时间】:2014-02-07 20:52:57 【问题描述】:

我在 access vba 中为列表框项上下移动编写代码。需要在 access 中使用 .List 属性。但它抛出一个错误,说没有找到方法或成员。任何替换方法 .List ?研究这个超过4天。 私有子 cmdUP_Click()

  Dim i As Long
 Dim leaveAlone As Boolean
 Dim pos As Long
 Dim Temp As String

pos = 0

With Me.lbfNames
For i = 0 To .ListCount - 1
leaveAlone = False

If .Selected(i) Then

    If i = pos Then
    leaveAlone = True
    End If

pos = pos + 1

    If leaveAlone = False Then
    Temp = .RowSource(i - 1)
    .RowSource(i - 1) = .RowSource(i) ' before i used .List instead of rowsource
    .RowSource(i) = Temp
    .ListIndex = i - 1
    .Selected(i) = False
    .Selected(i - 1) = True
    End If

    End If
    Next

    End With

【问题讨论】:

Access 中的列表框有一个rowSource 属性,也许您应该检查并操作它以获得您想要的。如果您的 rowSource 是一条 SQL 指令,那么您需要定义 SQL 中的行排序方式。 请参阅我上面的代码,以便在单击按钮时向上移动所选项目。在这种情况下,rowsource 属性会抛出错误的参数数量的异常。 【参考方案1】:

我已经弄清楚了,如何在访问中进行操作。但将列表框多选属性设置为“无”。

 Moving Down

 Private Sub cmdDown_Click()
 Dim sText As String
 Dim iIndex As Integer
 Dim bottomLimit As Integer
 iIndex = lbfNames.ListIndex
 bottomLimit = lbfNames.ListCount - 1
 'check: only proceed if there is a selected item
 If lbfNames.ListCount > 1 Then
     If iIndex >= bottomLimit Then
        MsgBox ("Can not move the item down any further.")
        Exit Sub
    End If
    'save items text and items indexvalue
    sText = lbfNames.Column(0, iIndex)
    If iIndex < bottomLimit Then
        lbfNames.RemoveItem iIndex
        'place item back in new position
        lbfNames.AddItem sText, iIndex + 1
    End If
    'if you keep that item selected
    'you can keep moving it by pressing btnMoveDown
    lbfNames.Selected(iIndex + 1) = True
    iIndex = iIndex + 1
   End If
   End Sub

      Moving up

   Private Sub cmdUP_Click()     
   Dim sText As String
   Dim iIndex As Integer
   iIndex = lbfNames.ListIndex
 ' ReDim iIndex(0 To 10)
  'check: only proceed if there is a selected item
   If lbfNames.ListCount > 1 Then
    'index 0 is top item which can't be moved up!
    If iIndex <= 0 Then
        MsgBox ("Can not move the item up any higher.")
        Exit Sub
    End If
    ' If iIndex = -1 Or lbfNames.ListCount > 1 Then
    'save items text and items indexvalue
    sText = lbfNames.Column(0, iIndex)
    lbfNames.RemoveItem iIndex
    'place item back on new position
    lbfNames.AddItem sText, iIndex - 1
    'if you keep that item selected
    'you can keep moving it by pressing cmdUp
    lbfNames.Selected(iIndex - 1) = True
    iIndex = iIndex - 1
    End If

    End Sub

【讨论】:

【参考方案2】:

简答:不,MS Access VBA 没有ListBox.List(row, column),而是有ListBox.AddItem(Item, Index)ListBox.RemoveItem(Index)

对于多列列表框分号字符';'可用于分隔列项,即myMultiColListBox.AddItem("Col_1_item;Col_2_item;Col_3_item")

【讨论】:

以上是关于访问 VBA 是不是有 Listbox.List 方法,因为 excel VBA 有的主要内容,如果未能解决你的问题,请参考以下文章

从 Excel VBA-检查访问表是不是存在/如果不存在,则创建/复制

通过模块 [VBA] 获取表单字段值

VBA访问检查父表单是不是存在

VBA Access 安全问题:检测访问实例是不是来自 Access.Application?

删除项目时 ListBox List<T> 绑定问题

在后面的代码中向 Asp ListBox List Items 添加属性时出现问题