0

产生两个下拉菜单的最佳方法是什么,其中第二个的内容取决于从第一个中选择的值?

第二个下拉列表是否会被创建为空白,并且每次我从第一个下拉列表中选择一个新值时,我都会“覆盖”某种引用第二个下拉列表的属性?还是每次单击第一个下拉菜单时都应该重新创建第二个下拉菜单?

任何代码片段都是最受欢迎的!

4

1 回答 1

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
于 2012-12-04T18:19:14.593 回答