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

时间:2017-10-16 09:38:53

标签: excel vba excel-vba combobox

我在Excel宏中使用userform创建组合框选择。

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

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

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的新手。

2 个答案:

答案 0 :(得分:0)

您没有检查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中的文字属性。

如果ComboBox为空,我还添加Exit Sub以保留该函数,因此它不会提交操作。

答案 1 :(得分:0)

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之间的差异 - 属性请参阅Distinction between using .text and .value in VBA Access

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

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