VBA:文本框和列表框

VBA:文本框和列表框,vba,excel,textbox,listbox,Vba,Excel,Textbox,Listbox,在我的UserForm上,我有一个TextBox写下我的序列号,类似于421012。 在它下面我有一个列表框,上面有“工具、工作台、轮子”等选项 我想做的是: 键入刚刚键入的序列号后,单击列表框中的一个选项,它会在序列号后面添加一个值 类似这样:421012+“选择工具”=42101215 “测试台”的结果为42101245 到目前为止,我的代码是: Private Sub UserForm_Initialize() With ListBox1 .AddItem "Tools" .AddItem

在我的
UserForm
上,我有一个
TextBox
写下我的序列号,类似于421012。 在它下面我有一个列表框,上面有“工具、工作台、轮子”等选项

我想做的是:

键入刚刚键入的序列号后,单击
列表框
中的一个选项,它会在序列号后面添加一个值

类似这样:421012+“选择工具”=42101215

“测试台”的结果为42101245

到目前为止,我的代码是:

Private Sub UserForm_Initialize()
With ListBox1
.AddItem "Tools"
.AddItem "Bench"
.AddItem "Wheel"
End With
End Sub

不知何故,我必须告诉VBA工具等于15或工作台等于45等等。

添加第二列,然后在进行值的串联时引用该列。“42012”&me.listbox.column(1)应返回所选内容的值

with listbox
    .columncount = 2
    .additem
    .list(1,0) = "Tools"
    .list(1,1) = 15
    .list(2,0) = "Bench"
    .list(2,1) = 45
    .list(3,0) = "Wheel"
    .list(3,1) = 75
end with

添加第二列,然后在进行值串联时引用该列。“42012”&me.listbox.column(1)应返回所选内容的值

with listbox
    .columncount = 2
    .additem
    .list(1,0) = "Tools"
    .list(1,1) = 15
    .list(2,0) = "Bench"
    .list(2,1) = 45
    .list(3,0) = "Wheel"
    .list(3,1) = 75
end with

我在对象中比在内部类型中更频繁地使用它,但另一种选择是存储一个字典,其中包含键入到列表框项上的查找:

'Module level variable
Private SerialLookup As Scripting.Dictionary

Private Sub UserForm_Initialize()
    Set SerialLookup = New Scripting.Dictionary
    With SerialLookup
        .Add "Tools", "15"
        .Add "Bench", "45"
        .Add "Wheel", "42"
    End With

    ListBox1.List = SerialLookup.Keys()
End Sub
然后,您可以通过将其用作字典索引来检索所需的任何值,即:

TextBox1.Value = "421012" & SerialLookup.Item(ListBox1.Value)

我在对象中比在内部类型中更频繁地使用它,但另一种选择是存储一个字典,其中包含键入到列表框项上的查找:

'Module level variable
Private SerialLookup As Scripting.Dictionary

Private Sub UserForm_Initialize()
    Set SerialLookup = New Scripting.Dictionary
    With SerialLookup
        .Add "Tools", "15"
        .Add "Bench", "45"
        .Add "Wheel", "42"
    End With

    ListBox1.List = SerialLookup.Keys()
End Sub
然后,您可以通过将其用作字典索引来检索所需的任何值,即:

TextBox1.Value = "421012" & SerialLookup.Item(ListBox1.Value)

我正要提出这个建议。我个人将“values”列的列宽设置为0。继续获取运行时错误381我认为@Comintern的答案更清晰。我不知道脚本字典。很酷,我正要提出这个建议。我个人将“values”列的列宽设置为0。继续获取运行时错误381我认为@Comintern的答案更清晰。我不知道脚本字典。很酷。@ThomasInzina-我怎么总是忘记。。。编辑。我最酷的答案之一是使用字典键:@ThomasInzina-我怎么总是忘记。。。编辑。我最酷的答案之一是使用字典键: