Значение текстового поля для извлечения из списка в зависимости от 2 других текстовых полей - PullRequest
0 голосов
/ 30 января 2019

У меня есть форма пользователя (Userform1), которая позволяет пользователям выбирать элементы (максимум 24 элемента) из флажков.(От флажка 1 до флажка 24)

Каждый флажок связан с отдельным текстовым полем, так что пользователи могут выбрать более 1 элемента.

Если флажок 1 установлен, то текстовое поле 1 = «A»

Если флажок 2 установлен, то текстовое поле 2 = "B" и оно продолжается следующим образом.

Теперь эти элементы доступны в малых и средних форматах.

У меня естьсписок всех товаров и их цены в зависимости от размера.

Пример моего списка:

Items   Price (Small)   Price (Medium)
A       10              15
B       7               12
and it goes on.

Я хочу, чтобы пользовательская форма отображала цены товаров в зависимости от их размеров.

Так что, когда пользователь выбирает элемент «А» маленьким - в текстовом поле будет отображаться цена 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

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

Есть ли более простой способ сделать это?

Спасибо.

1 Ответ

0 голосов
/ 30 января 2019

Не ясно, как именно вы настроены, но, пожалуйста, рассмотрите вариант, который я продемонстрирую ниже.

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 для каждого TextBox.Эта процедура будет вызывать Sub SetPrice, передавая номер записи TextBoxto (не уверен, что она всегда отличается, и, следовательно, не уверен, что она вообще требуется).Sub получит цену и запишет ее в TextBox.Если он всегда один и тот же, удалите параметр и просто укажите TextBox непосредственно в подпрограмме.

Обратите внимание, что функция Iif вернет 3, если размер не «МАЛЕНЬКИЙ».Для сравнения, ваш код вернул бы пробел, если он не является ни «SMALL», ни «MEDIUM».Если вам нужен этот результат, рассмотрите Select Case, а не If / Else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...