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

时间:2016-08-02 08:03:49

标签: vba excel-vba combobox excel

我正在编写一个从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 代码有一个选项两个组合框都是空的。

感谢您的帮助。

1 个答案:

答案 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