Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA ComboBox1\u下拉按钮单击事件_Vba_Excel - Fatal编程技术网

Excel VBA ComboBox1\u下拉按钮单击事件

Excel VBA ComboBox1\u下拉按钮单击事件,vba,excel,Vba,Excel,我得到一个宏,在它下面激发两次(两次显示相同的MessageBox)。第一个是ComboBox1打开时,第二个是Combox1关闭时 Private Sub ComboBox1_DropButtonClick() If Me.ComboBox2.Text = "" Then MsgBox "Fill text box" Else 'Do stuff End If End Sub 有没有办法让它只显示一次MessageBox。我希望用户在单击ComboBox2 DropButton之前先选

我得到一个宏,在它下面激发两次(两次显示相同的MessageBox)。第一个是ComboBox1打开时,第二个是Combox1关闭时

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

有没有办法让它只显示一次MessageBox。我希望用户在单击ComboBox2 DropButton之前先选择ComboBox1中的值。

我会使用combobox\u 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函数

这里有一个非常不公平的解决方法,使用“count”变量只在第一次而不是第二次提示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
但是,如果不需要使用下拉按钮,我强烈建议使用
ComboBox1\u Change()
事件

注意:“count”变量的声明需要在方法之外。这是因为:

  • 如果它留在内部,则它是方法的局部变量,因此每次方法结束时都会丢失其修改
  • 如果它停留在外部,即使方法结束运行,它也会保留修改

您能改用ComboBox1_Change()吗?非常感谢Matteo。这就是我要找的。我需要使用DropButtonClik事件,因为我想在用户单击按钮后立即通知用户,而更改和输入事件不会这样做。无需担心@KamranRasheed。如果这个答案令您满意,请不要忘了标记它;)