产生两个下拉菜单的最佳方法是什么,其中第二个的内容取决于从第一个中选择的值?
第二个下拉列表是否会被创建为空白,并且每次我从第一个下拉列表中选择一个新值时,我都会“覆盖”某种引用第二个下拉列表的属性?还是每次单击第一个下拉菜单时都应该重新创建第二个下拉菜单?
任何代码片段都是最受欢迎的!
这取决于您使用的是哪种下拉菜单。如果您使用数据验证来获得单元内下拉菜单,那么您可以将第二个下拉单元格的源设置为间接函数,然后您将数据放在引用第一个下拉菜单的命名范围中。更多信息在这里: 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