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

Posted

技术标签:

【中文标题】VBA - 变量获取 ComboBox 值,否则获取 TextBox 值错误【英文标题】:VBA - variable gets ComboBox value else gets TextBox value error 【发布时间】:2016-08-02 08:03:48 【问题描述】:

我正在编写一个从用户窗体打开的 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,但我会在了解为什么我的代码不起作用后处理它。

但是如果我没有从组合框中选择任何内容,我得到的错误是 Type mismatch,即使 If 代码有一个选项两个组合框都为空。

感谢您的帮助。

【问题讨论】:

您可能会发现使用组合框控件中的ListIndex 属性更容易。如果我记得,如果 ListIndex = -1 则该框没有选择任何值。 【参考方案1】:

如果 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属性。

编辑

从 cmets 中,我了解到您确实想要这个

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

【讨论】:

它仍然不起作用,即使我填充了两个文本框并且变量应该得到它们的值。我的变量是单一变暗的,也许是问题所在? 什么不起作用?你是如何声明lWidthlHeight 的。 As Single? @SiddharthRout 你打败了我 :) @ShaiRado:感谢上帝 ;) @Siddharth Rout 我的一切都变暗了,如果我不对用户的选择使用任何限制,代码就可以工作,当我编写这段代码时问题就开始了

以上是关于VBA - 变量获取 ComboBox 值,否则获取 TextBox 值错误的主要内容,如果未能解决你的问题,请参考以下文章

获取combobox选择的值

求VBA高手 ComboBox 自动出现在单元格,选择值后自动赋值给当前单元格的问题

LigerUI combobox的设置初始值不显示,怎么解决?

VBA中ComboBox的使用,急~~

Excel VBA:根据Combobox选择隐藏页面

在 VBA 中显示 Me.ComBox.Value 和 Me.ComboBox.RowSource 属性的设置