我正在编写一个从UserForm打开的VBA代码,其包含2个ComboBoxes和2个TextBoxes,以便用户选择形成2D矩阵。
我想要做的是,让变量得到组合框值(每个组合框的一个变量),如果选择为空,则变量得到文本框的值。 我已经用Google搜索了我需要使用的表达式,偶然发现 IsNull ,但代码不起作用。我试过的是:
If IsNull(Matrix_Size_1.value) = False And IsNull(Matrix_Size_2.value) = False Then
lWidth = Matrix_Size_1.value
lHeight = Matrix_Size_2.value
ElseIf IsNull(Matrix_Size_1.value) = True And IsNull(Matrix_Size_2.value) = True Then
lWidth = Matrix_Hand_1.value
lHeight = Matrix_Hand_2.value
End If
当然我还必须过滤更合理的情况:如果一个组合框是空的那么msgbox,如果一切都是空的那么msgbox但我会在我理解为什么我的代码没有&#39工作。
但是如果我不从组合框中选择任何内容,我得到的错误是 类型不匹配 ,即使 If 代码有一个选项两个组合框都是空的。
感谢您的帮助。
答案 0 :(得分:0)
如果Comboboxes .Style
属性设置为fmStyleDropDownList
,请使用此
If Matrix_Size_1.ListIndex = -1 And Matrix_Size_2.ListIndex = -1 Then
如果Comboboxes .Style
属性设置为fmStyleDropDownCombo
,请使用此
If Len(Trim(Matrix_Size_1.Value)) = 0 And Len(Trim(Matrix_Size_2.Value)) = 0 Then
您可以通过右键单击组合框并单击属性来检查设计模式中的Style
属性。
修改强>
从评论中我了解到你真的想要这个
Dim lWidth As Single, lHeight As Single
If Len(Trim(Matrix_Size_1.Value)) = 0 And Len(Trim(Matrix_Size_2.Value)) = 0 Then
lWidth = Val(Matrix_Hand_1.Value) '<~~> Val will take care of mismatch caused by empty boxes
lHeight = Val(Matrix_Hand_2.Value)
Else
lWidth = Val(Matrix_Size_1.Value)
lHeight = Val(Matrix_Size_2.Value)
End If