组合框:选择并输入后,项目将不可用

时间:2018-09-25 06:18:18

标签: vba combobox

我正计划创建一个用于安排采访的表格。理想情况下,我希望所选的时间一旦在上一个条目中选定后就在ComboBox上删除。

示例:第一个用户选择了“ 10am”作为他的日程表,然后该日程表将列在一列中。然后,第二个用户将不再能够查看/选择“上午10点”的时间表。

在此先感谢任何可以提供帮助的人!干杯!

1 个答案:

答案 0 :(得分:0)

这是一个子例程,它将根据完整项目列表和要排除的项目列表来替换ComboBox对象中的列表。

Private Sub RebuildItemList(ByRef ComboBox As Object, ByVal ItemsAvailable As Range, ByVal ItemsUsed As Range)
    'ComboBox: The ComboBox you want to change the list for
    'ItemsAvailable: A Range of cells that contain all the possible Items
    'ItemsUsed: A Range of cells that contain the Items you want to exlude from the list

    ComboBox.Clear 'Delete existing Entries

    If ItemsAvailable Is Nothing Then Exit Sub 'No Items available

    If ItemsUsed Is Nothing Then 'All Items available
        ComboBox.ControlSource = ItemsAvailable.Address(True, True, xlA1, True)
    Else
        Dim WorkingRange As Range

        For Each WorkingRange In ItemsAvailable.Cells 'Check each Item
            If WorksheetFunction.CountIf(ItemsUsed, WorkingRange.Value) < 1 Then
            'If Item has not yet been used
                ComboBox.AddItem WorkingRange.Value 'Add Item to the list
            End If
        Next WorkingRange
    End If
End Sub

例如,如果您有一个“时间”列表存储在Sheet1.Range("A1:A20")范围内,并且您已将预订的约会存储在Sheet2中,则“时间”存储在C列中(即Sheet2.Columns(3))那么您可以通过以下方式替换组合框ComboBox1中的列表:

RebuildItemList ComboBox1, Sheet1.Range("A1:A20"), Sheet2.Columns(3)