前面介绍了文本框,以及列表框的常用属性和方法。我们所没有介绍的是,这两个控件幸福地生活在了一起,然后呢?当然有然后了,ComboBox就出世了! ComboBox,中文叫复合框,顾名思义,是把文本框和列表框的特性结合起来的一种控件。这个控件,既可以输入文字,也可以像列表框一样选择选项。 属性ComboBox的很多属性,例如List,RowSource,BoundColumn,ColumnCount是和ListBox一样的,这里就不再做详细解释。 同样的,MaxLength,SelStart,SelLength这些属性和TextBox中的也是一样的。 另外,ComboBox的AddItem 和 Clear方法,也是和ListBox一样的。 当然,作为一个独立的控件,ComboBox也有自己特定的属性,在这里仔细研究一下。 限制输入作为一个高贵的ComboBox,如果要摒弃TextBox的血统,也就是不能在框里输入文字,可以由这么两种方式: MatchRequired这是一个布尔变量,可以在F4调出ComboBox的属性然后进行设置。设置为True之后,当ComboBox失去焦点时,ComboBox的值必须是他的列表项中的一个。否则,即使ComboBox为空,也会报错。 Style使用MatchRequired这种设置方法,虽然起到了限制作用,但还是存在用户把ComboBox中的数据删除留空,然后报错的情况。那么如何避免呢?
代码检查当然,我们也可以通过代码来检查用户输入的到底是不是有效数据。这里会用到ListIndex属性。 我在这里先定义了一个叫做CboCurrency的ComboBox,然后用他的Exit事件: Private Sub CboCurrency_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If CboCurrency.ListIndex = -1 Then MsgBox 'invalid data !', vbCritical vbOKOnly
End Sub TextColumn用于设定Text属性返回哪一列的数据。默认是-1,也就是ComboBox的文本显示第一列的数据。如下图所示: 如果我们把这个数字设置为2(当然前提是ComboBox的columncount也要设置为2,并且正确对RowSource进行赋值),那么我们就会发现ComboBox的文本显示的是第二列的值。 Text在TextBox里,Text属性和Value值相同。但是在ComboBox里,Value返回的是BoundColumn的值,而Text返回的是ComboBox的文本框里显示的值。这个是有区分的,不一定相同。 Column这个属性用于引用ComboBox中指定行和列的某个值。还是以上面的ComboBox为例,如果我要引用第二行的第一列和第二列的值(也就是澳大利亚元和100),那么我可以这样写: Private Sub CommandButton1_Click()
With CboCurrency
Debug.Print .Column(0, 0), .Column(1, 0)
End With
End Sub
总结一下
|
|
来自: L罗乐 > 《VBA基础入门教程》