当前位置: 首页 > 知识库问答 >
问题:

我希望每次选择组合框值时都运行一个子例程。我该怎么做?

荣轶
2023-03-14

我有一个包含三列的Excel文件。每行都是唯一的。有三个组合框对应于这三列。

当第一个组合框中的选项被选中时,我希望第二个组合框填充来自第二列的项目,这些项目对应于第一个组合盒中的选择。即:

< code>-亚当|苹果|种子

-亚当|苹果|核心

< code>- Adam | Orange | Peel

< code>- Jess |香蕉|果皮

- 杰西|芒果|纸浆

-Jess|橙色|种子

这里第一列有数据Adam, Jess。第一个组合框已经有两个唯一的选项Adam和Jess。

一旦用户选择了Adam或Jess,第二个组合框应该填充相应的水果名称。

示例组合框1=亚当

然后combobox2 ={Apple,Orange}

当苹果/桔子被选中时,第三个组合框应该有与前两个组合框相对应的选项。

请注意,我的第一个组合框已经正确填充了数据:

Function UniqueList()
'Populate control with
'unique list.

Range("Names").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("uniqueNames"), Unique:=True

'Set combo control's Row Source property.

Range("uniqueNames").RemoveDuplicates Columns:=1, Header:=xlNo
UserForm1.uniqueNameList.RowSource = Selection.CurrentRegion.Address

'Display user form.
UserForm1.Show

Selection.CurrentRegion.Clear

End Function

编辑:我基本上需要这样说:用第二行的单元格填充第二个组合框,其中第一行等于combobox1。

共有1个答案

越俊艾
2023-03-14

假设您在sheet1中有数据:

1-您可以使用combox_Change事件处理程序跟踪用户从组合框中选择新值的时间。

2-组合框列表索引:这将为您提供组合框中当前选定的索引

Combobox.list:包含组合框中所有项目的数组

 Private Sub ComboBox1_Change()
    Dim strValue As String
    Dim i As Integer
    If ComboBox1.ListIndex <> -1 Then
        strValue = ComboBox1.List(ComboBox1.ListIndex)
        ComboBox2.Clear
    ComboBox3.Clear
    For i = 1 To 6
        If Cells(i, 1) = strValue Then
            If exists(ComboBox2, Cells(i, 2)) = False Then
                ComboBox2.AddItem (Cells(i, 2))
            End If
            If exists(ComboBox3, Cells(i, 3)) = False Then
                ComboBox3.AddItem (Cells(i, 3))
            End If

        End If

    Next i
Else
    ComboBox2.Clear
    ComboBox3.Clear
End If

End Sub



Private Sub ComboBox2_Change()
Dim strValue1 As String
Dim strValue2 As String
Dim i As Integer
If (ComboBox2.ListIndex <> -1) And (ComboBox1.ListIndex <> -1) Then
    strValue1 = ComboBox2.List(ComboBox2.ListIndex)
    strValue2 = ComboBox1.List(ComboBox1.ListIndex)
    ComboBox3.Clear
    For i = 1 To 6
        If (Cells(i, 2) = strValue1) And (Cells(i, 1) = strValue2) Then
            If exists(ComboBox3, Cells(i, 3)) = False Then
                ComboBox3.AddItem (Cells(i, 3))
            End If    
        End If
    Next i
    Else
        ComboBox3.Clear  
    End If
End Sub

Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 6
    If exists(ComboBox1, Cells(i, 1)) = False Then
        ComboBox1.AddItem (Cells(i, 1))
    End If
Next i
End Sub

Private Function exists(ByRef objCmb As ComboBox, ByVal strValue As String) As Boolean
Dim i  As Integer

For i = 1 To objCmb.ListCount
    If strValue = objCmb.List(i - 1) Then
        exists = True
        Exit Function
    End If

Next i
exists = False
End Function

假设您有 3 个组合框,名称为 Combobox1、Combobox2 和 Combobox3(VBA 编辑器创建的默认名称),则代码将起作用

 类似资料:
  • 嘿,伙计们,我已经建立了一个下拉菜单,允许我从不同的角色选择。每次我选择一个角色,我的折线图加载。当我选择另一个选项时,它会再次加载。但是,当我再次选择我已经决定的选项时,它不会再次加载。所以它只加载一次然后再也不加载了。你知道我该怎么解决它吗?

  • google protobuf允许我编写如下原型代码: 它可以编译,没问题。我不太明白,对于“可选”字段,当没有指定值时,解码流返回给我默认值,没关系。但是“必需”字段呢,它不能是空的,那么它的“默认”是如何有效的呢?在什么情况下?

  • 我的用户控件上有两个组合框。我的目标是,当第一个被选中(里面有一个项目)时,第二个应该处于活动状态。以下是代码片段: 当第一个是项目选择时,如何激活第二个组合框?

  • 我已经添加了一个actionlistener到一个jmenuproject,它调用一个类,该类读取一个excel文件并在一个jframe中打开一个jgraph。我还添加了另一个actionlistener到不同的jmenuproject,为相同的exel文件调用相同的类,但不同的excel表(不同的int参数)。然而,当我运行我的主框架时,我点击菜单项,我一次只能打开其中一个。我必须关上一个来打开

  • 问题内容: 每次我声明并运行两个服务时,我都遇到以下binder.proxy异常。一个服务在不同的进程中运行(专用于应用程序),另一项服务在与我的应用程序在同一应用程序(默认应用程序进程)中使用Binder实现运行的进程中运行。 AndroidManifest.xml: 我在MainActivity上的第一个按钮上单击启动我的第一个服务: MainActivity.java 与MainApplic

  • 必须创建一个java应用程序,该应用程序将确定并显示用户输入的数字总和。求和必须在用户希望的时间内进行。当程序结束时,求和必须显示如下,例如,用户输入3个数字:10、12、3=25 并且必须使用while循环