简体   繁体   中英

Excel VBA ComboBox1_DropButtonClick Event

I got macro below which fires twice (showing same MessageBox twice). First when ComboBox1 opens and second when ComboBox1 closes.

Private Sub ComboBox1_DropButtonClick()
If Me.ComboBox2.Text = "" Then
   MsgBox "Fill text box"
Else
'Do stuff
End If
End Sub

Is there any way to make it show MessageBox once. I want user to select the value in ComboBox1 first before clicking on ComboBox2 DropButton.

I would do it using the combobox_enter event, but this only checks when the focus is switched

Private Sub ComboBox1_Change()
    If ComboBox1.Text = "" Then
        ComboBox2.ShowDropButtonWhen = fmShowDropButtonWhenNever
    Else
        ComboBox2.ShowDropButtonWhen = fmShowDropButtonWhenAlways
    End If
End Sub

Private Sub ComboBox2_Enter()
    If ComboBox1.Text = "" Then
        MsgBox "Must first set value to combobox1"
        ComboBox1.SetFocus
    End If
End Sub

Private Sub UserForm_Initialize()
    ComboBox1.AddItem "None", 0
    ComboBox1.AddItem "Select Me", 1
    ComboBox2.AddItem "None", 0
    ComboBox2.AddItem "Select Me", 1

    ComboBox2.ShowDropButtonWhen = fmShowDropButtonWhenNever
End Sub

My code does some extra things that I just think look pretty, you really only need the _Enter function

Here is a very unelegant work-around using a "count" variable that prompts the MsgBox only the first and not the second time.

Dim count As Integer
Private Sub ComboBox1_DropButtonClick()
count = count + 1
If Me.ComboBox2.Text = "" Then
   If count = 1 Then
       MsgBox "Fill text box"
   Else
        count = 0
   End If
Else
'Do stuff
End If
End Sub

However, I highly suggest to use the ComboBox1_Change() event if it's not necessary to use the drop button one.

PS: the declaration of the "count" variable needs to stay out of the method. This is due to the fact that:

  • if it stays inside, it's a local variable of the method and so loses its modifications every time the method is ended;
  • if it stays outside, it will keep the modifications even once the method has ended its run.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM