【问题标题】:VBA combobox options based on another combobox基于另一个组合框的 VBA 组合框选项
【发布时间】:2022-03-16 19:09:42
【问题描述】:

我有一个组合框,其选项从 300 到 650,增量为 10,我需要另一个组合框来显示先前值的选项 -5 和先前值的 -15,所以如果第一个组合框选择是 300,那么显示另一个组合框选项 295 和 285。我知道可以手动写下所有案例的所有选项,但这太疯狂了。我想知道是否有人对此有一个简单的解决方案?

Private Sub UserForm_Initialize()
ComboBox1.AddItem "300"
ComboBox1.AddItem "310"
ComboBox1.AddItem "320"
End Sub

Private Sub ComboBox1_Change()
Application.EnableEvents = False
ComboBox2.Clear
Application.EnableEvents = True

Select Case ComboBox1.Value
    Case "300"
        ComboBox2.AddItem "295"
        ComboBox2.AddItem "285"
End Select
End Sub

【问题讨论】:

    标签: excel vba combobox


    【解决方案1】:

    填充组合框

    • 为了将数据快速加载到组合框或列表框,recommended 使用带有值数组的 List 属性。

    守则

    Option Explicit
    
    Private Sub UserForm_Initialize()
        Const nMin As Long = 300
        Const nMax As Long = 650
        Const nInc As Long = 10
        Dim n As Long: n = Int((nMax - nMin) / nInc)
        Dim arr() As Long: ReDim arr(0 To Int((nMax - nMin) / nInc))
        Dim nCurr As Long: nCurr = nMin
        Dim i As Long
        For i = 0 To n
            arr(i) = nCurr
            nCurr = nCurr + nInc
        Next i
        ComboBox1.List = arr
    End Sub
    
    Private Sub ComboBox1_Change()
        With ComboBox2
            .Clear
            .AddItem ComboBox1.Value - 5
            .AddItem ComboBox1.Value - 15
        End With
    End Sub
    

    【讨论】:

    • 即使使用AddItem 在组合框中填充几个 1000 个条目也可以立即工作,所以我认为没有必要添加这种复杂性。
    【解决方案2】:

    使用简单的数学:

    Private Sub UserForm_Initialize()
        Dim i As Long
        ComboBox1.Clear
        For i = 300 To 650 Step 10
            ComboBox1.AddItem CStr(i)
        Next
    End Sub
    
    Private Sub ComboBox1_Change()
        Application.EnableEvents = False
        ComboBox2.Clear
        Application.EnableEvents = True
        Dim cb1Val
        cb1Val = val(ComboBox1.Value)
        If cb1Val > 0 Then
            ComboBox2.AddItem CStr(cb1Val - 5)
            ComboBox2.AddItem CStr(cb1Val - 15)
        End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2017-04-19
      相关资源
      最近更新 更多