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

Vba 组合框:一旦选择并输入,项目将不可用,vba,combobox,Vba,Combobox,我计划创建一个安排面试的表格。理想情况下,我希望在组合框中选择的时间被前一个条目选择后被删除 示例:第一个用户选择“上午10点”作为他的时间表,然后该时间表将列在一列中。然后,第二个用户将无法再查看/选择“上午10点”的时间表 提前感谢任何能提供帮助的人!干杯 下面是一个子例程,它将根据项目的完整列表和要排除的项目列表替换ComboBox对象中的列表: Private Sub RebuildItemList(ByRef ComboBox As Object, ByVal ItemsAvailab

我计划创建一个安排面试的表格。理想情况下,我希望在组合框中选择的时间被前一个条目选择后被删除

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


提前感谢任何能提供帮助的人!干杯

下面是一个子例程,它将根据项目的完整列表和要排除的项目列表替换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

你有一个示例代码吗?或者你是在处理一些可以帮助别人理解的事情吗?如果你有,请在你的问题中附上它。这是用户表单吗?有“提交”按钮的工作表?工作表,您可以在其中手动将每次面试输入一行?(前两个应该相当相似,第三个将需要一个完全不同的解决方案)@Chronocidal嗨,先生,我计划以用户形式提供它。单击“提交”按钮后,数据将被编码在工作表上(这将包括为时间表选择的时间)。然后,当有另一个用户为日程表编码新数据时,我希望前一个用户选择的前一个时间在组合框中不再可用。这一次。@AlexisVillar,您好,先生,不幸的是,我没有一个我能想出的代码,因为我只是VBA的初学者。这太棒了!谢谢,伙计!但我想问,是否有可能基于另一个标准?例如,列E包含一个房间列表(房间1、房间2,…),如果为房间1选择了所有时间(例如,下午1:00),则这些项目将不再可用,但仍然可以用于房间2(下午1:00),因为时间尚未选择。@Allen Yup,只需更改
If WorksheetFunction.CountIf(WorkingRange.Value,ItemsUsed)<1然后
行-听起来你可能想要一个?您好,是的,我想使用CountIfs函数。参数中将包含两列(a列和B列)。我应该如何添加代码:If WorksheetFunction.CountIf(WorkingRange.Value,ItemsUsed)<1然后?我还想问-我应该在哪里包含子例程代码?它应该是UserForm中CommandButton的一部分,还是ComboBox对象中代码的一部分?@Allen您可以使用查看相对于当前范围的单元格(例如ItemsUsed.Offset(0,1)是使用的
项目右侧的列。我上一篇评论中的链接解释了
COUNTIFS
的工作原理,并给出了一些示例
RebuildItemList ComboBox1, Sheet1.Range("A1:A20"), Sheet2.Columns(3)