我有一个用户表单(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。
有没有更简便的方法?
谢谢。
答案 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。