【问题标题】:Excel VBA - UserForm Combobox with If StatementExcel VBA - 带有 If 语句的用户窗体组合框
【发布时间】:2021-03-19 05:58:53
【问题描述】:

我创建了一个用户表单。代码尚未完成,但尝试在组合框上设置条件。代码如下:

Private Sub UserForm_Initialize()

    With SupText
        .AddItem "Sup1"
        .AddItem "Sup2"
        .AddItem "Sup3"
    End With
    
    With ProdText
        .AddItem "Prod1"
        .AddItem "Prod2"
        .AddItem "Prod3"
        .AddItem "Prod4"
        .AddItem "Prod5"
    End With
    
    With UnitText
        .AddItem "kL"
        .AddItem "T"
    End With
    
    With StaText
        .AddItem "In Progress"
        .AddItem "Awaiting"
        .AddItem ""
    End With
    
    With ProLText
        .AddItem "1"
        .AddItem "4"
        .AddItem "1&4"
        .AddItem "2"
        .AddItem "3"
        .AddItem "2&3"
        .AddItem "WOPL"
        .AddItem "BOPL"
        .AddItem "Industry Line"
    End With
    
    End Sub

所以,我想做的是ProLText 组合框根据SupText 填充列表。当我使用 if 语句时,它不起作用。例如,如果从 SupText 组合框中选择 Sup1,我只想给出 ProLText 组合框的前 6 个选项,则 Sup2 给出下一个 2,而 Sup3 给出最后一个项目。但是由于某种原因,它会为 else 语句而不是 if 或 else if 给出结果。

任何想法为什么它不起作用?

问候。

【问题讨论】:

    标签: excel vba combobox userform


    【解决方案1】:
    1. 将组合框的.Style 更改为fmStyleDropDownList
    2. 不要在UserForm_Initialize() 中向ProLText 添加项目
    3. SupText_Click() 事件中清除ProLText 并重新添加相关项目。

    代码

    Private Sub SupText_Click()
        If SupText.ListIndex = -1 Then Exit Sub
        
        ProLText.Clear
        
        Select Case SupText.Text
        Case "Sup1"
            With ProLText
                .AddItem "1"
                .AddItem "4"
                .AddItem "1&4"
                .AddItem "2"
                .AddItem "3"
                .AddItem "2&3"
            End With
        Case "Sup2"
            With ProLText
                .AddItem "WOPL"
                .AddItem "BOPL"
            End With
        Case "Sup3"
            With ProLText
                .AddItem "Industry Line"
            End With
        End Select
    End Sub
    

    或者更短的版本

    Private Sub SupText_Click()
        If SupText.ListIndex = -1 Then Exit Sub
            
        With ProLText
            .Clear
            Select Case SupText.Text
                Case "Sup1"
                    .AddItem "1"
                    .AddItem "4"
                    .AddItem "1&4"
                    .AddItem "2"
                    .AddItem "3"
                    .AddItem "2&3"
                Case "Sup2"
                    .AddItem "WOPL"
                    .AddItem "BOPL"
                Case "Sup3"
                    .AddItem "Industry Line"
            End Select
        End With
    End Sub
    

    【讨论】:

    • 非常感谢!它完美地工作。我现在可以添加多个级别的语句。顺便说一句,如果你有机会,你能否解释一下为什么相同的代码不起作用UserForm_Initialize()?我还在学习编码,所以我可能缺少基础知识。
    • UserForm_Initialize() 在开始时将所有内容添加到组合框中。把它想象成把盘子里的所有食物放在一起。所以,现在吃什么,然后回去吃下一份食物;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2018-09-27
    • 2015-06-27
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多