如果组合框为空,则 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 ...
(有关value
和text
-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 宏中的警告消息的主要内容,如果未能解决你的问题,请参考以下文章
如果组合框为空,combobox.removeAllItems 方法会抛出异常吗? [关闭]