VBA-变量获取ComboBox值,否则获取TextBox值错误



我正在编写一个从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

最新更新