我正在编写一个从UserForm打开的VBA代码,该代码包括2个组合框和2个文本框,可根据用户选择形成2D矩阵。
我想做的是,让一个变量获得组合框的值(每个组合框一个变量),如果选择为空,那么这些变量就会获得文本框的值。我在谷歌上搜索了需要使用的表达式,偶然发现了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。但我会处理一次,我会理解为什么我的代码不起作用。
但是,如果我没有从组合框中选择任何内容,我会得到类型不匹配的错误,即使if代码可以选择两个组合框都为空。
我很感激你的帮助。
如果组合框.Style
属性设置为fmStyleDropDownList
,则使用此
If Matrix_Size_1.ListIndex = -1 And Matrix_Size_2.ListIndex = -1 Then
如果组合框.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