如何检查组合框列表中是否已存在数据?

时间:2013-10-11 00:57:52

标签: vba

如何检查cmbTypeYacht.text中是否存在来自cmbTypeYacht.list的数据?

这就是我所拥有的:

Dim TypeYacht As String 'Type of yacht input

TypeYacht = cmbTypeYacht.Text

If TypeYacht = ("cmbTypeYacht list") Then
    MsgBox "Type of Yacht is already on the list", vbExclamation, "Yacht Chantering"
Else
    cmbTypeYacht.AddItem cmbTypeYacht.Text

    With cmbTypeYacht
        .Text = ""
        .SetFocus
    End With
End If

抱歉标签我不太确定它是哪个但是我正在使用Microsoft Visual Basic应用程序。

5 个答案:

答案 0 :(得分:9)

ComboBox类有一个FindStringExact()方法可以帮到你,就像这样:

Dim resultIndex As Integer = -1

resultIndex = cmbTypeYacht.FindStringExact(cmbTypeYacht.Text)

If resultIndex > -1 Then
    ' Found text, do something here
    MessageBox.Show("Found It")
Else
    ' Did not find text, do something here
    MessageBox.Show("Did Not Find It")
End If

您也可以循环浏览列表,如下所示:

Dim i As Integer = 0
For i = 0 To cmbTypeYacht.Items.Count - 1
    If cmbTypeYacht.Items.Contains(cmbTypeYacht.Text) Then
        MessageBox.Show("Found It")
        Exit For
    End If
Next

答案 1 :(得分:2)

我在Excel 2013中工作,没有FindStringExact或.Items.Contains所以这些都不是有效的。也没有必要迭代列表。实际上非常简单。给定用户形式“MyUserForm”和组合框“MyComboBox”,

If MyUserForm.MyComboBox.ListIndex >= 0 Then
    MsgBox "Item is in the list"
Else
    MsgBox "Item is NOT in the list"
End If

说明:如果所选项目不在列表中,则.ListIndex返回-1。

答案 2 :(得分:0)

您无需遍历combobox.items。 Items.Contains将为您迭代列表。

只需使用:

If cmbTypeYacht.Items.Contains(cmbTypeYacht.Text) Then
    MessageBox.Show("Found It")
    Exit For
End If

答案 3 :(得分:0)

搜索:VBA检查组合框列表中是否已存在数据? 但是vba不具备上述属性。

Sub TestString() 
    Dim myString As String 
    Dim i As Long 
    Dim strFound As Boolean 


     'Just for test purposes
    myString = "Apple" 


    strFound = False 
    With Me.ComboBox1 
         'Loop through combobox
        For i = 0 To .ListCount - 1 
            If .List(i) = myString Then 
                strFound = True 
                Exit For 
            End If 
        Next i 
         'Check if we should add item
        If Not strFound Then .AddItem (myString) 
    End With 
End Sub 

这是在http://www.ozgrid.com/forum/showthread.php?t=187763进行大量搜索后找到的 实际上是有效的

答案 4 :(得分:0)

vba中的组合框有一个名为MatchFound的属性。如果您在组合框(ComboBox.Value)中输入的值之前存在,它将返回true。

将以下代码放在组合框的更新事件中进行试用

Private Sub ComboBox_AfterUpdate()
If ComboBox.MatchFound = True then
    Msgbox "Value exist"
End If
End Sub

检查出来: https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/combobox-matchfound-property-outlook-forms-script