生成两个下拉菜单的最佳方法是什么,其中第二个菜单的内容取决于从第一个菜单中选择的值?
第二个下拉列表是否会被创建为空白,每次从第一个下拉列表中选择一个新值时,我会“覆盖”某个属性,指的是第二个下拉列表?或者我应该在每次点击第一个下拉列表时重新创建第二个下拉菜单吗?
欢迎使用任何代码段!
答案 0 :(得分:1)
这取决于您使用的是什么类型的下拉菜单。如果您使用数据验证来获取单元格下拉列表,则可以将第二个下拉单元格的源设置为间接函数,然后将您的数据置于引用第一个下拉列表的命名范围中。 更多信息: http://www.contextures.com/xlDataVal02.html
如果您在第一个下拉列表中有大量数据,则创建所有命名范围会很繁琐。
我也在使用VBA的用户表单中完成了这项工作。
Public Branches() As String
Public Function List_Branch_Set(lngRegion As String) As Long
Dim lngAllBranches As Long
Dim lngReg As String
Dim lngBranches As Long
Dim lngIdx As Long
Dim rw As Long
lngAllBranches = Sheets("sheet1").Range("C1").Value
lngBranches = CountBranches(lngRegion)
If lngBranches > 0 Then
ReDim Branches(lngBranches - 1)
For rw = 2 To lngAllBranches + 1
lngReg = Sheets("sheet1").Cells(rw, 2).Value
If lngReg = lngRegion Then
Branches(lngIdx) = Sheets("sheet1").Cells(rw, 1).Value
lngIdx = lngIdx + 1
End If
Next rw
End If
List_Branch_Set = lngBranches
End Function
然后我的数据以下列格式存储在sheet1上: 分区
函数CountBranches()计算此列表中与所选区域匹配的行数。然后你需要在第一个cbo上触发。
Private Sub cboRegion_Change()
Dim lngNum As Long
Me.cboBranch.Clear
lngNum = List_Branch_Set(NullHandleText(Me.cboRegion))
If lngNum <> 0 Then
Me.cboBranch.List = Branches
End If
End Sub