2016-09-26 5 views
0

На моем UserForm у меня есть TextBox где записывают свои серийные номера, что-то вроде 421012. под ним у меня есть ListBox с опциями, такими как «Инструменты, скамейка, Колесо»VBA: TextBox и ListBox

Я 'm attemting do:

После того, как я напечатал свой серийный номер, который я только что ввел, я нажимаю на один из вариантов в ListBox, и он должен поместить значение за мой серийный номер.

Что-то вроде этого: 421012 + "меню Сервис" = 421012

"Bench" бы получить результат 421012

Мой код до сих пор:

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

Как-то я должен сказать VBA, что Tools равен 15 или Bench равен 45 и т. Д.

+0

[Возможно отношение] (Ht tp: //codereview.stackexchange.com/q/140995/23788) –

ответ

1

Добавьте второй столбец, а затем укажите, что, когда вы выполняете конкатенацию значения. «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 
+1

Я как раз собирался это предложить. Я лично установил ширину столбца столбца «values» равным 0. – Comintern

+0

Продолжайте получать Время выполнения Ошибка 381 – Alec

+0

Я думаю, что ответ @Comintern намного чище. Не знал о скриптовых словарях. Очень круто. – geeFlo

1

Я использую это гораздо чаще, чем с объектами с внутренними типами, но другой вариант хранить словарь, содержащий Lookups ключом на ваших ListBox пунктов:

'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) 
+0

@ ТомасИнзина - Как мне всегда удается забыть об этом ... Отредактировано. – Comintern

+1

В одном из моих самых классных ответов использовались словарные ключи: [Можно ли использовать автофильтр или найти в словаре?] (Http://stackoverflow.com/questions/39162841/is-it-ppossible-to-use-autofilter- или-найти-на-словарь/39177064 # 39177064) –