我正在创建一个弹出式下拉复选框,该复选框取决于在上一个单元格列中选择的项目。我尝试使用数据验证,但是有2个问题:1.我无法获取复选框选项,它只能是一个简单的下拉菜单,并且2.如果其中有多个项目,则无法使用左单元格列。例如:在下面的示例中,请注意,如果有人在“宠物”下的第一列中选择了猫,则假设英国猫的毛发是白色,波斯人的毛发可能是橙色和灰色,那么如果用户同时选择了英国和波斯人的类型,向下的复选框列表中,应该可以选择所有英式和波斯猫皮毛颜色选项,例如下面示例中的最后一行。
Pets | Types | Fur Color
_________________________
Cats | British | White
Cats | Persian | Orange, Gray
Cats | British, Persian | White, Orange, Gray
理想情况下,我的代码应将“类型”作为输入,并且仅使取决于选择的“类型”的浅色类型可见。诸如通过其他选项附加到预制的列表框或加入2个列表框之类的东西。目前,我正在编写一个代码,其中为每个猫的毛皮颜色设置了单独的列表框,但是我不确定如果用户要选择一种以上类型的猫,则不同列表框的联接将如何工作。 这是我使用的数据验证代码((由于上述原因而无法使用)
=OFFSET($C$1,MATCH($I$5,$B$2:$B$31,0),0,COUNTIF($B$2:$B$31,$I$5))
这是用于创建弹出列表框(即复选框)的代码。
Option Explicit
Dim fillRng As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Gatewaycode As MSForms.ListBox
Dim LBobj As OLEObject
Dim i As Long
Set LBobj = Me.OLEObjects("Gateway")
Set Gatewaycode = LBobj.Object
If Not Intersect(Target, Range("O2:O50")) Is Nothing Then
Set fillRng = Target
With LBobj
.Left = fillRng.Left
.Top = fillRng.Top
.Width = fillRng.Width
.Visible = True
End With
Else
LBobj.Visible = False
If Not fillRng Is Nothing Then
fillRng.ClearContents
With Gatewaycode
If .ListCount <> 0 Then
For i = 0 To .ListCount - 1
If fillRng.Value = "" Then
If .Selected(i) Then fillRng.Value = .List(i)
Else
If .Selected(i) Then fillRng.Value = _
fillRng.Value & "," & .List(i)
End If
Next
End If
For i = 0 To .ListCount - 1
.Selected(i) = False
Next
End With
Set fillRng = Nothing
End If
End If
End Sub
我知道这确实很复杂,但是任何帮助都是好的。如果有链接或代码段可以帮助附加或列表框,或仅使长列表的某些部分可见,请告诉我。