如果组合框为空,则 Excel 宏中的警告消息

Posted

技术标签:

【中文标题】如果组合框为空,则 Excel 宏中的警告消息【英文标题】:Warning message in Excel macro if combobox null 【发布时间】:2017-10-16 09:38:52 【问题描述】:

我在 Excel 宏中使用用户窗体创建组合框选择。

我想要做的是,防止用户在不选择值的情况下单击确定。

这是我的代码,我不知道出了什么问题,消息框不显示。

Private Sub UserForm_Initialize()
    ComboBox1.RowSource = "Sheet1!G1:G" & Range("G" & Rows.Count).End(xlUp).Row
    ComboBox2.RowSource = "Sheet1!G1:G" & Range("G" & Rows.Count).End(xlUp).Row
End Sub


Private Sub CommandButton1_Click()
    If IsNull(ComboBox1) Then
        MsgBox ("ComboBox Has Data")
    End If

    Workbooks("Select Project.xlsm").Sheets("Sheet1").Range("B2").Value =  ComboBox1.Value
    Workbooks("Select Project.xlsm").Sheets("Sheet1").Range("C2").Value = ComboBox2.Value
End Sub

谁能帮助我的代码有什么问题?抱歉,我是 VBA 新手。

【问题讨论】:

不测试IsNull(ComboBox1)IsNull(ComboBox1.Text) 更好的方法是禁用确定按钮而不是弹出消息 【参考方案1】:

您没有检查 ComboBox 的 Text 属性。你应该这样处理。

Private Sub CommandButton1_Click()
    If (ComboBox1.Text = "") Then
        MsgBox "ComboBox Has No Data"
        Exit Sub
    End If

    Workbooks("Select Project.xlsm").Sheets("Sheet1").Range("B2").Value =  ComboBox1.Value
    Workbooks("Select Project.xlsm").Sheets("Sheet1").Range("C2").Value = ComboBox2.Value

End Sub

发生了什么变化?

我将 If IsNull(ComboBox1) Then 更改为 If (ComboBox1.Text = "") Then,因此这将检查您的 ComboBox 中的 Text 属性。

如果 ComboBox 为空,我还添加了Exit Sub 以离开该功能,因此它不会在之后提交操作。

【讨论】:

【参考方案2】:

IsNull(ComboBox1)IsNull(ComboBox1).Value 都不会是真的。如果字段不包含值,Null 是从数据库返回的值。您必须检查 ComboBox 的 value 是否为空。 VBA 中的空字符串是长度为 0 的字符串,因此您必须使用其中的一个:

If Me.ComboBox1 = "" then ...
If Me.ComboBox1.Value = "" then ...
If Me.ComboBox1.Text = "" then ...

(有关valuetext-property 之间的区别,请参阅Distinction between using .text and .value in VBA Access)

无论如何,我会寻求启用/禁用按钮的解决方案(如 Rosetta 建议的那样)。将事件例程放入 Combobox:

Private Sub ComboBox1_Change()
    Me.CommandButton1.Enabled = Me.ComboBox1.Value <> ""
End Sub

【讨论】:

以上是关于如果组合框为空,则 Excel 宏中的警告消息的主要内容,如果未能解决你的问题,请参考以下文章

访问报告中的绑定组合框为空

Datagridview 组合框为空

如果组合框为空,combobox.removeAllItems 方法会抛出异常吗? [关闭]

通过连续形式访问循环

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表

在 MS Access 中根据表单中的多个组合框查询所有记录