大家好。在上一期的工作中,我们主要分享了使用。下拉组合框的list属性,用于快速为下拉组合框的列表内容赋值。当时,我们使用的方法是创建一个没有名称的新临时数组(使用数组(自定义数组元素列表))。这种一次性赋值的方法,确实比用“Combobox1”一个一个地加要高效得多。AddItem Element”,所以有粉丝收藏了我完整的案例作品。
但是,今天有粉丝给我写了一条私信说,这能是什么样的事情。要分配列表属性吗?她很想知道,甚至她给我发了一个她做的这个属性赋值的例子。她说这是错的,让我给她一些建议。我在做上一个工作的时候,主要关注功能实现。可能我忽略了这些细节,所以对不起你。既然这个pbdwdm今天问了这个问题,我还是总结一下,分享给大家。希望这一期能有上一期的完美收官!
好吧,我就开门见山了!让我们来看一下赋值所需的数据类型。首先列出属性;然后,使用数据链接机制来控制一个组合框到另一个组合框的内容。接下来,我们先来看看第一个!
一、分配数据范围的类型。组合框的列表属性
(1)列表类型数据
格式:Combobox1.list=[{列表项1,列表项2,列表项3,列表项n}]
示例:Combobox1.list=[{ '中国','韩国','美国','巴西' }]
(2)静态数组类型数据
格式:Combobox1.list=静态数组名或combobox 1 . list=数组(自定义数组元素列表)
示例:arr_static=Array(1,3,5,7,9)
Combox1.list=arr _ static或
Combobox1.list=Array(“中国”、“韩国”、“美国”、“巴西”)
(3)动态数组类型数据
格式:Redim arr_dynamic(0到n)'其中n可以是动态变量。
给arr_dynamic动态数组赋值
Combobox1.list=arr_dynamic
示例:调光rg作为范围
设置rg=工作表(1)。范围(' A3:F8 ')
Redim arr_dynamic(0至rg。计数-1)
对于i=0至rg。计数-1
arr_dynamic(i)=rg(i 1)
然后
Combobox1.list=arr_dynamic
(Excel工作表一列或一行中指定范围类型的数据
1.列指定范围类型的数据。
Format: Combobox1.list=指定范围的列。价值。
示例:调光rg作为范围
设置rg=工作表(1)。范围(' A3:A8 ')
Combobox1.list=rg。价值
2.一行指定范围类型的数据。
格式:combobox1。list=工作表函数。反转(一条线指定范围。值)
示例:调光rg作为范围
设置rg=工作表(1)。范围(' A3:F3 ')
combobox 1 . list=Worksheetfunction。转置。值)
以上是Combobox1.list属性分配的最常用的数据类型。你不妨自己试试!
接下来,我想和大家分享一下上述类型的数据在列表内容中的应用在组合框之间的链接。
什么是联动?无奈之莲是指一方的行为内容被另一方的变化所控制,动态变化机制是联动。接下来,我们将设计并实现第一个组合框在两个组合框之间链接第二个组合框的列表项的情况。希望大家都能好好品味。
第二,设计的两个组合框实现了第一个组合框到第二个组合框的联动控制。
(1)在Excel工作表的前界面增加两个组合框。
添加两个组合框来设置一些其他的学习技巧。如下图所示
图1两个插入的组合框
(2)为这两个组合框添加VBA联动控制功能代码。
模块1中的代码:
定义选择样式变量Choice_Style和公共全局字符串类型的任何类型的样式模式变量Style_Mode。
公共选择_样式为字符串,样式_模式
Sub _ ini _ combobox1 _ items()'初始化组合框1“combobox 1”的列表内容,并使其处于“选择提示”状态。
将crt调暗为组合框
设置阴极射线管=工作表(1)。组合框1
Crt。列表=[{'-选择第二个组合框列表赋值方法g
t;>-"}]crt.ListIndex = 0 '置为列表索引号ListIndex为0,表示设置组合框呈现为“选择提示”状态
End Sub
Sub Ini_Combobox2_Items() '初始化组合框1“Combobox1”的列表内容,并且使之呈“选择提示”状态
Dim crt As ComboBox
Set crt = Sheets(1).ComboBox2
crt.List = [{"-<<请选择列表内容>>-"}]
crt.ListIndex = 0 '置为列表索引号ListIndex为0,表示设置组合框呈现为“选择提示”状态
End Sub
Function Transps(rg As Range) As Variant 'VBA后台自行定义一个转置函数Transps
If CountA_a_Range(rg) = 0 Then '判断rg是否是空范围(调用自定义统计范围非空元素个数)
rg_address = Replace(rg.Address, "$", "") '用VBA专用的字符串替换函数Replace()替换掉rg地址(rg.Address)中的$字符
Transps = "The Range(""" & rg_address & """) Is a Empty Range" '注意:VBA环境下的“""”代表一个实际的“"”的意思
Else '若rg是非空范围,则作如下转置操作(事实上就是一种矩阵转置“行、列交换”问题)
min_row = rg(1).Row '取得rg范围第一个元素的最小行号
min_col = rg(1).Column '取得rg范围第一个元素的最小列号
max_row = rg(rg.Count).Row '取得rg范围最后一个元素的最大行号
max_col = rg(rg.Count).Column '取得rg范围最后一个元素的最大列号
rg_cols = max_col - min_col + 1 '用rg_cols取得rg范围的列数
rg_rows = max_row - min_row + 1 '用rg_rows取得rg范围的行数
ReDim arr_tmp(1 To rg_cols, 1 To rg_rows) '用ReDim自定义转置后的动态数组arr_tmp()--行为rg的列,列为rg的行
'以下二重循环实现rg-->动态二维数组arr_tmp的转置
For r = 1 To rg_cols
For c = 1 To rg_rows
arr_tmp(r, c) = rg(c, r)
Next
Next
Transps = arr_tmp '将这个转置后的动态二维数组回传到函数头部Transps
End If
End Function
Function CountA_a_Range(rg As Range) '自行定义一个VBA下测试rg范围的非空单元格个数
c = 0 '用临时变量c统计非空单元格个数,初始值为0
For i = 1 To rg.Count
If Len(rg(i)) <> 0 Then c = c + 1 '通过Len(rg(i))巧妙判定该单元格是否为非空单元格
Next
CountA_a_Range = c '将最终的统计结果c回传到函数头部CountA_a_Range
End Function
Sheet1内的代码:
Private Sub ComboBox1_DropButtonClick() '组合框1“ComboBox1”压下倒三角按钮重置新内容
Dim crt As ComboBox '定义组合框对象ctr
Set crt = Sheets(1).ComboBox1 '为组合框对象ctr指派具体的组合框对象ComboBox1
crt.List = [{"列表方式赋值";"静态数组方式赋值";"矩形数据区域以动态数组方式赋值";"行数据区域范围、列数据区域范围方式"}]
End Sub
Private Sub ComboBox1_LostFocus() '组合框1“ComboBox1”失去焦点后恢复只有“选择提示”信息
Call Ini_Combobox1_Items
End Sub
Private Sub ComboBox1_Change() '根据'组合框1“ComboBox1”选择列表项目情况判断设置Style_Mode选择模式值
If ComboBox1.SelLength = 0 Then
Call Ini_Combobox2_Items
Else
Choice_Style = ComboBox1.Value '选择样式变量
If Choice_Style <> "-<<选择第二组合框列表赋值方式>>-" Then
Select Case Choice_Style
Case "列表方式赋值": Style_Mode = 1 '置选择样式模式为1
Choice_Style = "" '置选择样式模式后即可将选择样式清空
Case "静态数组方式赋值": Style_Mode = 2 '置选择样式模式为2
Choice_Style = "" '置选择样式模式后即可将选择样式清空
Case "矩形数据区域以动态数组方式赋值": Style_Mode = 3 '置选择样式模式为3
Choice_Style = "" '置选择样式模式后即可将选择样式清空
Case "行数据区域范围、列数据区域范围方式": Style_Mode = 4 '置选择样式模式为4
Choice_Style = "" '置选择样式模式后即可将选择样式清空
Case "": Call Ini_Combobox2_Items '若Choice_Style为空,则初始化组合框1的值为“选择提示”模式
End Select
End If
End If
End Sub
Private Sub ComboBox2_DropButtonClick() '组合框2“ComboBox2”压下倒三角按钮重置新内容
Dim crt As ComboBox, rg As Range
Set crt = Sheets(1).ComboBox2
Select Case Style_Mode '根据Style_Mode的值的情况进行多分支判断处理组合框2的列表项
Case 1: crt.List = [{"优秀";"良好";"及格";"不及格"}] '列表([{列表项1,列表项2,.....}])形式赋值
Style_Mode = 0 '每次多分枝选择执行后,都将Style_Mode重置为0
Case 2: '静态定义并初始化数组arr_static()
arr_static = Array("北京市", "上海市", "天津市", "重庆市")
crt.List = arr_static
Style_Mode = 0 '每次多分枝选择执行后,都将Style_Mode重置为0
Case 3: Set rg = Sheets(1).Range("a3:d4")
ReDim arr_dynamic(0 To rg.Count - 1) '动态定义数组arr_dynamic()
For i = 0 To rg.Count - 1
arr_dynamic(i) = rg(i + 1)
Next
crt.List = arr_dynamic
Style_Mode = 0 '每次多分枝选择执行后,都将Style_Mode重置为0
Case 4: Set rg = Sheets(1).Range("a11:d11")
'下面是通过自定义的转置函数将行范围区域将rg转换为列范围区域的
ar = IIf(rg(1).Row = rg(rg.Count).Row, Transps(rg), IIf(rg(1).Column = rg(rg.Count).Column, rg, ""))
crt.List = ar
Style_Mode = 0 '每次多分枝选择执行后,都将Style_Mode重置为0
Case 0: Call Ini_Combobox2_Items '若Style_Mode=0,则初始化组合框2的值为“选择提示”模式
End Select
End Sub
Private Sub ComboBox2_LostFocus() '组合框2“ComboBox2”失去焦点后恢复只有“选择提示”信息
Call Ini_Combobox2_Items
End Sub
Private Sub ComboBox2_Change()
If ComboBox2.Value <> "-<<请选择列表内容>>-" Then
MsgBox "您在组合框[" & ComboBox2.Name & "]选择的数据项是“" & ComboBox2.Value & "”!", vbInformation, "提示"
End If
End Sub
注意:以上的代码除了具有联动控制功能在,同样有组合框“选择提示”信息哦!
(三)测试.list属性的几种赋值+联动控制效果
1、在组合框1数据进行数据选择方式选择。如下图所示
2、点击组合框2,发现组合框2的列表项内容已动态变化。如下图所示
然后,会弹出一个选择的选项的对话框。见下图所示
3、如果在未选择组合框1任何内容,直接去点击组合框2会发现没有列表项。如下图所示
好了,以上分享算是比较完整的了,希望大家喜欢,也但愿能对大家工作有所帮助。
最后,同样深深感谢大家的长期关注(头条号:跟我学Office高级办公)、推广、点评哦!