访问 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-检查访问表是不是存在/如果不存在,则创建/复制