我在Excel宏中使用userform创建组合框选择。
这是我的代码,我不知道有什么问题,消息框没有显示。
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的新手。
答案 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 ...
(有关value
和text
之间的差异 - 属性请参阅Distinction between using .text and .value in VBA Access)
无论如何,我会选择启用/禁用按钮的解决方案(如 Rosetta 建议的那样)。将事件例程放入Combobox:
Private Sub ComboBox1_Change()
Me.CommandButton1.Enabled = Me.ComboBox1.Value <> ""
End Sub