vba如何根据选择添加组合框内容
2016年8月11日
作者: 来源:
在使用多个组合框输入数据时,往往希望后一个组合框中的条目能根据前一个组合框的内容有所不同,如示例中第二个选择城市的组合框根据第一个选择省份的组合框所选择的不同省份加载不同的县市名称,示例代码如下: #001 Private Sub UserForm_Initialize() #002 Dim col As New Collection #003 Dim arr As Variant #004 Dim rng As Range #005 Dim i As Integer #006 On Error Resume Next #007 For Each rng In Range("A2:A" & Sheet1.Range("A65536").End(xlUp).Row) #008 If rng <> "" Then col.Add rng, CStr(rng) #009 Next #010 ReDim arr(1 To col.Count) #011 For i = 1 To col.Count #012 arr(i) = col(i) #013 Next #014 ComboBox1.List = arr #015 ComboBox1.ListIndex = 0 #016 CommandButton1.Accelerator = "D" #017 End Sub #018 Private Sub ComboBox1_Change() #019 Dim myAddress As String #020 Dim rng As Range #021 Dim mymsg As Integer #022 ComboBox2.Clear #023 With Sheet1.Range("A:A") #024 Set rng = .Find(What:=ComboBox1.Text) #025 If Not rng Is Nothing Then #026 myAddress = rng.Address #027 Do #028 ComboBox2.AddItem rng.Offset(, 1) #029 Set rng = .FindNext(rng) #030 Loop While Not rng Is Nothing And rng.Address <> myAddress #031 End If #032 End With #033 ComboBox2.ListIndex = 0 #034 End Sub 代码解析: 第1行到第17行代码窗体的Initialize事件过程,在窗体显示时将工作表A列中的省份名称去除重复后加载到组合框中。 其中第7行到第13行代码把工作表A列中的省份名称使用Add方法去除重复后加载到组合框中,应用于Collection 对象的Add方法添加一个成员对象 。 第15行代码设置组合框的ListIndex属性为0,选中组合框的第一行条目。ListIndex属性指定当前选中的列表框或组合框条目,语法如下: object.ListIndex [= Variant] 参数Variant是可选的,控件中当前被选的条目。 ListIndex 属性包含列表中被选行的索引,取值范围为 -1 到列表总行数减 1(即ListCount - 1)之间的数值。当用户没有选中行时,ListIndex 返回 -1。列表中第一行的 ListIndex值是0,第二行的ListIndex 值是1,依此类推。 第16行代码设置窗体中按钮的Accelerator属性值。Accelerator属性设置或检索控件的加速键,语法如下: object.Accelerator [= String] 参数String是可选的,用作加速键的字符。 先按住 Alt 再紧接着按加速键,会将焦点定位到该对象上,并初始化与该对象关联的一个或多个事件,也就是说窗体显示后按Alt+D组合键将会执行“关闭”按钮中的代码关闭窗体。 第18行到第34行代码ComboBox1的Change事件过程,使用Find方法将所有属于ComboBox1所选择的省份的县市加载到ComboBox2中。
阅读:2051
上一则:vba如何在输入时逐步提示信息
下一则:使用DTP控件输入日期
|