Excel VBA ComboBox1_DropButtonClick事件

我得到的macros下面两次触发(显示相同的MessageBox两次)。 首先在ComboBox1打开时,第二次在ComboBox1closures时。

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

有什么办法让它显示MessageBox一次。 我希望用户在单击ComboBox2 DropButton之前先selectComboBox1中的值。

这是一个非常不合理的解决方法,使用“count”variables来提示MsgBox只有第一次而不是第二次。

 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 

但是,我强烈build议使用ComboBox1_Change()事件,如果没有必要使用下拉button之一。

PS:“count”variables的声明需要保持不在方法中。 这是由于以下事实:

  • 如果它留在里面,它是方法的局部variables,所以每次方法结束时都会丢失它的修改;
  • 如果它停留在外面,即使方法结束运行,也将保持修改。

我会使用combobox_enter事件做到这一点,但是这只会在焦点切换时进行检查

 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 

我的代码做了一些额外的事情,我只是觉得漂亮,你真的只需要_Enter函数