要从列表中提取文本框值,具体取决于其他2个文本框

时间:2019-01-30 09:09:25

标签: excel vba

我有一个用户表单(Userform1),允许用户从复选框中选择项目(最多24个项目)。 (从Checkbox1到checkbox24)

每个复选框都链接到一个不同的文本框,以便用户可以选择多个项目。

如果选中了复选框1,则文本框1 =“ A”

如果选中复选框2,则文本框2 =“ B” 这样就可以了。

现在这些项目在中小型可用。

我有所有物品的清单以及每种尺码的不同价格。

我的列表示例:

Items   Price (Small)   Price (Medium)
A       10              15
B       7               12
and it goes on.

我希望用户窗体能够根据商品的尺寸来拉高它们的价格。

因此,当用户选择较小的项目“ A”时,一个文本框将显示价格10。

我尝试过:

Private Sub Textbox1_change()
Dim sizes As String
sizes = Me.TextBox1.Value

On Error Resume Next

If textboxsize.Value = "SMALL" Then Me.TextBox25.Value = 
application.worksheetfunction.vlookup(sizes, sheets("PRICE 
LIST").range("A2:C100000"),2,0)
End If

If textboxsize.Value = "MEDIUM" Then Me.TextBox25.Value = 
application.worksheetfunction.vlookup(sizes, sheets("PRICE 
LIST").range("A2:C100000"),3,0)  
End If

End Sub

它正在工作,但约束是我必须将代码复制到用户表单的每个文本框中并更改ID。

有没有更简便的方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

不清楚您的设置方式,但是请考虑以下我演示的版本。

Private Sub Textbox1_Change()

    SetPrice 25
End Sub

Private Sub SetPrice(TbxNumber As Integer)

    Dim Sizes As String
    Dim Price As Variant
    Dim Clm As Long

    Sizes = Me.Textbox1.Value
    Clm = IIf(TextboxSize.Value = "SMALL", 2, 3)

    On Error Resume Next
    Price = Application.WorksheetFunction.VLookup(Sizes, _
            Worksheets("PRICELIST").Range("A2:C100000"), Clm, 0)
    Me.Controls("TextBox" & TbxNumber).Value = Price
End Sub

每个文本框都需要一个Change事件过程。该过程将调用Sub SetPrice,传递要写入的TextBox的编号(不确定它始终是不同的,因此不确定它是否是必需的)。 Sub将检索价格并将其写入TextBox。如果始终相同,则删除参数,然后直接在子窗口中指定TextBox。

请注意,如果大小不是“ SMALL”,则Iif函数将返回3。相比之下,如果代码既不是“ SMALL”也不是“ MEDIUM”,则将返回空白。如果需要该结果,请考虑使用Select Case而不是If / Else。