Excel VBA根据更改的组合框值显示结果

Excel VBA根据更改的组合框值显示结果,excel,vba,Excel,Vba,我的用户表单如下所示: 我没有什么标准可以满足。 1.不同的客户会有不同的工艺和规格 2.如果ID#(textbox1)为空,则流程和规范也将更改。 3.不同的客户将使用不同的G-chip来执行他们的进度 我的代码如下: Private Sub Userform_initialize()ComboBox1.List = Array("Apple", "Banana", "Watermelon") End Sub Private Sub TextBox1_Change() Call Cu

我的用户表单如下所示:

我没有什么标准可以满足。 1.不同的客户会有不同的工艺和规格 2.如果ID#(textbox1)为空,则流程和规范也将更改。 3.不同的客户将使用不同的G-chip来执行他们的进度

我的代码如下:

Private Sub Userform_initialize()ComboBox1.List = Array("Apple", "Banana",   
"Watermelon")
End Sub

Private Sub TextBox1_Change()
Call CuAl
If TextBox1.Value = "N/A" Then
    Call CustXPTArray
Else
    Call CustWithPTAluArray
End If
End Sub

Sub CustWithPTAlu()
Select Case ComboBox1
    Case "Apple"
        ComboBox2.List = Array("Ni", "NiNi")
    Case "Banana"
        ComboBox2.List = Array("Au", "AuAu")
    Case "Watermelon"
        ComboBox2.List = Array("Pd", "PdPd")
End Select
End Sub

Sub CustWithPTAluArray()
Call CustWithPTAlu
If ComboBox1.Text = "Apple" Then
    TextBox2.Value = IIf(ComboBox2.Value = "Ni", "10S", "20S")
Else
    If ComboBox1.Text = "Banana" Then
        TextBox2.Value = IIf(ComboBox2.Value = "Au", "30S", "40S")
    Else
        TextBox2.Value = IIf(ComboBox2.Value = "Pd", "50S", "60S")
    End If
End If
End Sub

Sub CuAl()
Select Case ComboBox1
    Case "Apple"
        ComboBox3.List = Array("Cu", "Al")
    Case "Banana"
        ComboBox3.List = Array("Cu")
    Case "Watermelon"
        ComboBox3.List = Array("Al")
End Select
End Sub

Sub CustXPT()
ComboBox2.List = Array("Ni", "NiAu", "NiPd", "NiPdAu")
End Sub

Sub CustXPTArray()
Call CustXPT
Select Case ComboBox2
    Case "Ni"
        TextBox2.Value = "70S"
    Case "NiAu"
        TextBox2.Value = "80S"
    Case "NiPd"
        TextBox2.Value = "90S"
    Case "NiPdAu"
        TextBox2.Value = "100S"
End Select
End Sub
当我尝试运行代码时,规范不会改变。它将保持相同的数字

我不知道,当我一个接一个地设置所有函数时,怎么会发生这种情况

Customer: ComboBox1
ID#: TextBox1
G-chip:ComboBox3
Plating Type:ComboBox2
Lower Range:TextBox2

我在这里所做的就是将表单计算的逻辑放在“calc_form”中,然后在任何一个字段发生更改时调用它,无论是在textbox1/combobox2/combobox3中。当条件发生变化时,您可能需要考虑清除组合框中的值,主要是为了强制用户重新检查

Private Sub ComboBox2_Change()
calc_form
End Sub

Private Sub ComboBox3_Change()
calc_form
End Sub

Private Sub TextBox1_Change()
calc_form
End Sub

Sub calc_form()
Call CuAl
If TextBox1.Value = "N/A" Then
    Call CustXPTArray
Else
    Call CustWithPTAluArray
End If
End Sub

Private Sub Userform_initialize()
ComboBox1.List = Array("Apple", "Banana", "Watermelon")
End Sub

Sub CustWithPTAlu()
Select Case ComboBox1
    Case "Apple"
        ComboBox2.List = Array("Ni", "NiNi")
    Case "Banana"
        ComboBox2.List = Array("Au", "AuAu")
    Case "Watermelon"
        ComboBox2.List = Array("Pd", "PdPd")
End Select
End Sub

Sub CustWithPTAluArray()
Call CustWithPTAlu
If ComboBox1.Text = "Apple" Then
    TextBox2.Value = IIf(ComboBox2.Value = "Ni", "10S", "20S")
Else
    If ComboBox1.Text = "Banana" Then
        TextBox2.Value = IIf(ComboBox2.Value = "Au", "30S", "40S")
    Else
        TextBox2.Value = IIf(ComboBox2.Value = "Pd", "50S", "60S")
    End If
End If
End Sub

Sub CuAl()
Select Case ComboBox1
    Case "Apple"
        ComboBox3.List = Array("Cu", "Al")
    Case "Banana"
        ComboBox3.List = Array("Cu")
    Case "Watermelon"
        ComboBox3.List = Array("Al")
End Select
End Sub

Sub CustXPT()
ComboBox2.List = Array("Ni", "NiAu", "NiPd", "NiPdAu")
End Sub

Sub CustXPTArray()
Call CustXPT
Select Case ComboBox2
    Case "Ni"
        TextBox2.Value = "70S"
    Case "NiAu"
        TextBox2.Value = "80S"
    Case "NiPd"
        TextBox2.Value = "90S"
    Case "NiPdAu"
        TextBox2.Value = "100S"
End Select
End Sub

有没有可能,我再添加一个函数,以便在字段再次更改时清除内容?实际上,您可以删除其中的大部分函数,并将它们放在更改事件中的正确位置下-上面的操作很有效,因此我现在不必麻烦更改它。无论如何,关于你的问题,我不会(你也不需要)编写一个新函数来清除内容。编写代码以清除TextBox1_Change事件下的其他下拉列表。如果希望组合框事件也清除任何值,则可能需要在组合框事件下放置一些代码