如果combobox1在combobox2列表中包括一个项目,则返回错误

时间:2019-08-05 12:26:50

标签: excel vba combobox duplicates userform

我有一个用户窗体,上面有2个组合框。

-一个作为带有团队名称的下拉列表,即:Team 1,Team 2,Team 3,-另一个组合框用作文本输入。

我想要一个VBA代码,按下操作按钮后,它会检查输入框的值,并将其与第一个组合框中的列表进行交叉引用。

-如果该框的值不在其中,则我希望它执行索引匹配功能,该功能将更改某些页面上的列表值并重新加载用户窗体。 -如果该框的值在那里,我希望它在消息框“无法更改团队,重复或其他内容”时提示用户。

我尝试了变量,对于每个语句和列表索引。到目前为止没有运气。

我已经对代码进行了很大的更改,以至于我没有任何半有效的示例,但是我将添加它(我知道它已损坏),但是我将尝试传达我想发生的事情:

KEY:Combobox1 = Select_Team(下拉列表)Combobox2 = Change_Team(输入)

For Each item In Select_Team

If Select_Team.listindex = Change_Team.Value Then
MsgBox "Duplicate"

Else:
MsgBox "This was changed"

'(This code works, I just need to implement the IF function)
Evaluate("=INDEX('Teams'!B2:S21,2,MATCH(""" & Select_Team.Value & """,'Teams'!B3:S3,0))") = Me.Change_Team.Value

Unload Me
Edit_Teams.Show

我让它工作了,但是我无法标记重复项。我最终有了一个组合框:

Team 1
Team 1
Team 1
Team 4
Team 5
Team 6
Team 7

团队是从单元格值的另一页中拉出来的,因此这些项目是“硬编码的”,因此不能被listindex -1删除。

仅当Change_Team值不在下拉组合框中时,我希望索引匹配函数更改组名(确实如此)。

1 个答案:

答案 0 :(得分:1)

我相信您的错误在于您如何解释ComboBox.ListIndex。此属性返回一个整数,而不是相应项目的值。实际上,在您的代码中,按原样使用item就足够了。

For Each item In Select_Team.List
    If item  = Change_Team.Value Then
        MsgBox "Duplicate"
        Exit Sub
    End If
Next item
MsgBox "This was changed"
Evaluate("=INDEX('Teams'!B2:S21,2,MATCH(""" & Select_Team.Value & """,'Teams'!B3:S3,0))") = Me.Change_Team.Value
Unload Me
Edit_Teams.Show

如果正确声明了变量,则此修改后的代码版本应该可以工作。另外,我不知道您的设置是否完整,但是使用ComboBox.Value和ComboBox.Text时要小心。

希望这行得通,祝您好运!