从Listbox计算并返回重复项

时间:2017-12-11 09:49:07

标签: vba ms-access access-vba

我在MS Access 2016中有一个列表框(Listbox1),其中包含1列 - ActualDate。

此列包含大量日期,其中一些日期重复。<​​/ p>

此列表框的rowsource是

Set rs = CurrentDb.OpenRecordset("SELECT q.ActualDate FROM TBLQUOTESNEW q WHERE q.ActualDate >= #12/01/2017# order by q.ActualDate")

我需要在同一表单上填充另一个列表框(Listbox2),它有2列 - ActualDate和Count - 其中Count是包含日期的Listbox1中选定行的数量。

所以Listbox1可能是: -

13/01/2017
13/01/2017
14/01/2017
14/01/2017

如果选择了所有4行,则Listbox2应返回

13/01/2017    2
14/01/2017    2

我不确定实现这一目标的最佳方法。我已经能够创建一个具有独特日期的数组,但从那里我很难过。

2 个答案:

答案 0 :(得分:1)

您可以使用以下子程序:

Public Sub MoveListBoxItems(lstDestination As ListBox, lstSource As ListBox)
    Dim intListItem As Long
    Dim lastItem As String
    Dim itemAmount As Long
    'Set these using the property pane, then remove them from the VBA
    lstDestination.RowSource = ""
    lstDestination.RowSourceType = "Value List"
    lstDestination.ColumnCount = 2
    For intListItem = 0 To lstSource.ListCount - 1 'iterate through the whole list
        If lstSource.Selected(intListItem) Then 'If the item is selected
            If lstSource.ItemData(intListItem) = lastItem Then 'If the current item is equal to the last one
                itemAmount = itemAmount + 1 'Increment the amount by 1
            Else
                If itemAmount <> 0 Then 'If it isn't a non-occuring list item (first iteration
                    lstDestination.RowSource = lstDestination.RowSource & """" & lastItem & """;""" & itemAmount & """;"
                End If 'Add the item
                lastItem = lstSource.ItemData(intListItem) 'Last item = current item, amount = 1
                itemAmount = 1
            End If
        End If
    Next intListItem
    If itemAmount <> 0 Then 'If it isn't a non-occuring list item
        lstDestination.RowSource = lstDestination.RowSource & """" & lastItem & """;""" & itemAmount & """;"
    End If 'Add the last item
End Sub

这样称呼:MoveListBoxItems Me.Listbox2, Me.Listbox1

请注意,它带有一些假设,即:必须对列表进行排序,列表不得包含任何引号(否则您需要添加引号转义)

答案 1 :(得分:0)

如果列表框,我会使用子表单。子表单基于具有附加列“已选择”的临时表,用户使用复选框选择记录。在这种情况下,将很容易根据临时表中的分组查询显示第二个列表框或子表单