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
【讨论】:
它仍然不起作用,即使我填充了两个文本框并且变量应该得到它们的值。我的变量是单一变暗的,也许是问题所在? 什么不起作用?你是如何声明lWidth
和lHeight
的。 As Single
?
@SiddharthRout 你打败了我 :)
@ShaiRado:感谢上帝 ;)
@Siddharth Rout 我的一切都变暗了,如果我不对用户的选择使用任何限制,代码就可以工作,当我编写这段代码时问题就开始了以上是关于VBA - 变量获取 ComboBox 值,否则获取 TextBox 值错误的主要内容,如果未能解决你的问题,请参考以下文章
求VBA高手 ComboBox 自动出现在单元格,选择值后自动赋值给当前单元格的问题