将所选项目从一个列表框移到另一个

时间:2018-06-19 19:46:39

标签: vba loops ms-access for-loop listbox

我有两个列表框,分别名为listbox1和listbox2。

Listbox1使用SQL查询填充,并且包含两列。它的第一列包含带有逗号的值。

在Access属性页的“行源类型”属性中,将Listbox2设置为值列表。

我的目标是使用控制按钮将选定的项目从listbox1复制到listbox2。

我还需要知道listbox1记录包含逗号,它们在复制期间充当定界符。不过,该特定问题已解决。

我创建了两个模块来完成将所选记录从一个列表框复制到另一个列表的操作:

Public Sub CopySelected(ByRef frm As Form)

    Dim ctlSource As Control
    Dim ctlDest As Control
    Dim strItems As String
    Dim intCurrentRow As Integer

    Set ctlSource = Me!listbox1
    Set ctlDest = Me!listbox2

    For intCurrentRow = 0 To ctlSource.ListCount - 1
        If ctlSource.Selected(intCurrentRow) = True Then
            'must insert double quote around single quote to escape commas
            strItems = strItems & "'" & ctlSource.Column(0, intCurrentRow) & "'" & ";" 


            Me!listbox2.AddItem (strItems)

        End If
    Next intCurrentRow
End Sub

Private Sub cmdAddSelected_Click()

    CopySelected Me

End Sub

我确实将listbox1的多选选项设置为“扩展”。

当前问题是,当我单击控制按钮时,仅复制了列表框1中的第一个选择,并重复了多次警告(复制的数字与所选记录相同) )。

很明显,我的For循环有问题。

R是我的主要语言,而我只是在学习VBA。

1 个答案:

答案 0 :(得分:0)

在您的程序中,您将所有选择的值与分隔符连接在一起,并将越来越长的字符串添加到Listbox2。 ;用作多列列表框的列分隔符,即,您只是将所选值从Listbox1“转置”到Listbox2,而多余的项(高于Listbox2的列数)则被忽略。如果要将单个值复制到Listbox2单列中,请执行以下操作:

For intCurrentRow = 0 To ctlSource.ListCount - 1
    If ctlSource.Selected(intCurrentRow) Then
        strItems = "'" & ctlSource.Column(0, intCurrentRow) & "'" 
        Me!listbox2.AddItem (strItems)
    End If
Next intCurrentRow