excel - 根据其他 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。
有没有更简单的方法来做到这一点?
谢谢。
解决方案
不清楚您是如何设置的,但请考虑我在下面演示的变体。
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。
推荐阅读
- android - Camera2 CaptureResult.CONTROL_AF_STATE - INACTIVE
- java - 如何根据值 JSON 设置选择项?
- c++ - 使用 qtsql 打开加密数据库
- javascript - 在 react.js 上使用 vue 组件(vuera 插件)
- mysql - 从日期<今天mysql的数据库中选择
- c# - 为什么在 c# 中使用套接字时没有发生 TCP 握手?
- javascript - 从 UI 触发批处理文件
- android - 底页动画在某些设备中不起作用
- r - 将最频繁的列保存到 data.frame 中
- html - 使用 CSS 定位 div(左右)