【问题标题】:How to trigger event in one ComboBox when value selected in another ComboBox?在另一个 ComboBox 中选择值时如何在一个 ComboBox 中触发事件?
【发布时间】:2020-01-13 07:23:45
【问题描述】:

我有一个 ComboBox“选择视图”,其中包含(WEEK、MONTH、QUARTER 和 ALL)。我想当第一个 ComboBox 被选中时,例如:“WEEK”,第二个 ComboBox “select the period” 将被填充,而不需要带有“W1,W2,....W52”的点击按钮,或者如果我们选择“QUARTER”将填充“Q1,Q2,Q3,Q4”等。

我尝试了下面的代码,但效果不佳。

Private Sub ComboBox4_Change()

Dim index As Integer

With Sheets("SUMMARY")
index = .ComboBox3.ListIndex
    .ComboBox4.Clear

    With .ComboBox4
        Select Case index
            Case Is = 0
                .AddItem "W1"
                .AddItem "W2"
                .AddItem "W3"
                .AddItem "W4"
                .AddItem "W5"
                .AddItem "W6"
                .AddItem "W7"
                .AddItem "W8"
                .AddItem "W9"
                .AddItem "W10"
                .AddItem "W11"
                .AddItem "W12"
                .AddItem "W13"
                .AddItem "W14"
                .AddItem "W15"
                .AddItem "W16"
                .AddItem "W17"
                .AddItem "W18"
                .AddItem "W19"
                .AddItem "W20"
                .AddItem "W21"
                .AddItem "W22"
                .AddItem "W23"
                .AddItem "W24"
                .AddItem "W25"
                .AddItem "W26"
                .AddItem "W27"
                .AddItem "W28"
                .AddItem "W29"
                .AddItem "W30"
                .AddItem "W31"
                .AddItem "W32"
                .AddItem "W33"
                .AddItem "W34"
                .AddItem "W35"
                .AddItem "W36"
                .AddItem "W37"
                .AddItem "W38"
                .AddItem "W39"
                .AddItem "W40"
                .AddItem "W41"
                .AddItem "W42"
                .AddItem "W43"
                .AddItem "W44"
                .AddItem "W45"
                .AddItem "W46"
                .AddItem "W47"
                .AddItem "W48"
                .AddItem "W49"
                .AddItem "W50"
                .AddItem "W51"
                .AddItem "W52"

            Case Is = 1
                .AddItem "JANUARY"
                .AddItem "FEBRUARY"
                .AddItem "MARCH"
                .AddItem "APRIL"
                .AddItem "MAY"
                .AddItem "JUNE"
                .AddItem "JULY"
                .AddItem "AUGUST"
                .AddItem "SEPTEMBER"
                .AddItem "OCTOBER"
                .AddItem "NOVEMBER"
                .AddItem "DECEMBER"

            Case Is = 2
                .AddItem "Q1"
                .AddItem "Q2"
                .AddItem "Q3"
                .AddItem "Q4"
            Case Is = 3
                .AddItem "ALL"
        End Select
    End With

End With

End Sub

【问题讨论】:

  • 您遇到了什么问题?
  • 当我在 ComboBox 1 中选择一个值时,我希望动态填充 ComboBox 2(不使用点击)@Brian M Stafford
  • 尝试将您的代码放入ComboBox3_Change
  • 我照你说的做了,而且效果很好@Brian M Stafford

标签: vba events combobox


【解决方案1】:
  1. 我会将它分成两个功能,更易于维护。
  2. 您可以使用数组来使代码更小
  3. 我的代码假定 ComboBox3 包含过滤器,而 combo4 是需要填充的。我想你可能把上面这两个混在一起了。
Private Sub ComboBox3_Change()

    with thisworkbook.worksheets("Summary")
        call PopulateCombo4(.ComboBox3.value)
    end with

end sub
Private Sub PopulateCombo4(val as string)

    thisworkbook.worksheets("Summary").combobox4.clear

    dim arr() as string
    if val = "QUARTERLY" then
        arr = split("Q1,Q2,Q3,Q4")
    Elseif val = "WEEKLY" then
        '....[same as above with W1,W2....]
    end if            

    dim s as string
    for each s in arr
        thisworkbook.worksheets("Summary").combobox4.additem s
    next

end sub

如果您有任何后续问题,请告诉我。去开会。

【讨论】:

  • 你不觉得这个电话很丑吗?特别是在潜艇上。只需使用PopulateCombo4 .ComboBox3.value.Force OP 使用一些命名模式,除了自动生成的,例如ComboViewComboPeriodComboYear。如果你必须告诉 appart 一个值的几个条件,我会使用 for ... 循环(和MonthName(n,False))构建组合。你知道RubberduckVBA?这也将建议其他优化(以及其他功能和blog
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2017-08-20
  • 2021-11-21
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多