【发布时间】:2015-05-26 19:27:56
【问题描述】:
我正在尝试在用户窗体中设置 3 个组合框。
- ComboBox1 = 是/否/空白
-
ComboBox2 = 选项列表
- 选项1
- 选项2
- 选项3
- 选项4
- 选项5
- 选项6
- 选项7
- 选项8
ComboBox3 = 是我遇到问题并需要帮助的地方。
ComboBox3 依赖于 ComboBox1 和 ComboBox2 的组合
我希望我能解释清楚。
例如。
如果 ComboBox1 = "" 那么在 ComboBox2 和 Combobox3 中不显示任何选项
如果 ComboBox1 = Yes 并且 ComboBox2 = Option1 然后给我这个选项列表
如果 ComboBox1 = No 并且 ComboBox2 = Option1 然后给我这个其他选项列表。
如果 ComboBox1 = Yes 并且 ComboBox2 = Option2 然后给我这个选项列表
如果 ComboBox1 = No 并且 ComboBox2 = Option2 然后给我这个其他选项列表。
每个选项都以此类推。
希望这是有道理的,有人可以对此有所了解。
如果需要更多详细信息,请告诉我。
谢谢。
更新
经过研究,我发现了一个可以完成这项工作的脚本,但我在将它实施到我当前的代码时遇到了问题。我在一个单独的表格上对其进行了测试,一切都按预期工作。如何将它集成到我当前的 UserForm_Initialize() 中?
我将此部分放置在表单的开头 UserForm_Initialize() Sub 之前。 (我也尝试过添加它)
Private dic As Object
Private Sub ComboBox1_Change()
With Me
.ComboBox2.Clear
.ComboBox3.Clear
If .ComboBox1.ListIndex <> -1 Then
.ComboBox2.List = dic(.ComboBox1.Value).keys
End If
End With
End Sub
Private Sub ComboBox2_Change()
With Me
.ComboBox3.Clear
If .ComboBox2.ListIndex <> -1 Then
.ComboBox3.List = dic(.ComboBox1.Value)(.ComboBox2.Value).keys
End If
End With
End Sub
这是进入 UserForm_Initialize() 子的第二部分,我不断收到错误“运行时错误 9。下标超出范围”。工作表“列表”存在,它包含所有必要的信息。如果我在另一个表单上单独尝试,它会起作用。
Private Sub UserForm_Initialize()
Dim a, i As Long
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = 1
a = Sheets("Lists").Cells(1).CurrentRegion.Value
For i = 2 To UBound(a, 1)
If Not dic.exists(a(i, 2)) Then
Set dic(a(i, 2)) = CreateObject("Scripting.Dictionary")
End If
If Not dic(a(i, 2)).exists(a(i, 1)) Then
Set dic(a(i, 2))(a(i, 1)) = CreateObject("Scripting.Dictionary")
End If
dic(a(i, 2))(a(i, 1))(a(i, 3)) = i
Next
Me.ComboBox1.List = dic.keys
End Sub
这就是我的 UserForm_Initialize() 在没有此代码的情况下最初的样子。这是让我加载一些其他组合框。
Private Sub UserForm_Initialize()
Dim rngResponse As Range
Dim ws As Worksheet
Set ws = Worksheets("Lists")
For Each rngResponse In ws.Range("Response")
Me.cbRes1.AddItem rngResponse.Value
Me.cbRes2.AddItem rngResponse.Value
Me.cbRes3.AddItem rngResponse.Value
Me.cbRes4.AddItem rngResponse.Value
Me.cbRes5.AddItem rngResponse.Value
Me.cbRes1.AddItem rngResponse.Value
Next rngResponse
End Sub
【问题讨论】:
-
使用用户窗体上的
ComboBox_Change事件对此进行编程。首先对 ComboBox1 执行此操作,如果它为空白,则将其他两个空白并清除 ComboBox 3 的列表。然后在 ComboBox2 上设置一个更改事件,以根据在 ComboBoxes 1 和 2 中选择的内容调整 ComboBox3 的选项。如果您遇到特定问题,请使用您提出的代码以及您遇到问题的位置更新您的问题。 -
感谢tigeravatar。我已经尽我所能,但我没有想法,我已经发布了我迄今为止所做的更新。
-
在您的描述和发布的示例脚本中,它只讨论了 3 个组合框。但是,在您原来的
UserForm_Initialize代码中,它显示了五个组合框。我们是在使用三个还是五个组合框? -
您在我在更新中发布的 UserForm_Initialize 代码中看到的 5 个是用于其他目的的其他组合框,它们与我试图开始工作的其他 3 个无关。我发布了我的 userform_initialize 代码,因为我不知道如何将其他 3 个代码集成到我当前的工作中。
-
我终于让它工作了。我让脚本查看所选工作表中超出范围的列。