首页 > 解决方案 > 根据其他 2 个文本框从列表中提取文本框值

问题描述

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

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

如果选中复选框 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。

有没有更简单的方法来做到这一点?

谢谢。

标签: excelvba

解决方案


不清楚您是如何设置的,但请考虑我在下面演示的变体。

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

您需要为每个 TextBox 设置一个 Change 事件过程。该过程将调用 Sub SetPrice,传递要写入的 TextBox 的编号(不确定它是否总是不同的,因此根本不确定它是否是必需的)。Sub 将检索价格并将其写入 TextBox。如果始终相同,请废弃参数并直接在 sub.xml 中指定 TextBox。

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


推荐阅读