Страницы: 1
RSS
Более красивая запись, If comboBox = "несколько значений"
 
Имеется ComboBox и TextBox
Нужно, чтобы TextBox отображался только при определенных значениях в ComboBox
Самый банальный вариант выглядит так
Код
Private Sub ComboBox3_Change()
    If ComboBox3 = "Начисление" Then
        TextBox1.Visible = True
    ElseIf ComboBox3.Value = "Траты" Then
        TextBox1.Visible = True
    ElseIf ComboBox3.Value = "Отпуск" Then
        TextBox1.Visible = True
    Else
        TextBox1.Visible = False
    End If
End Sub
Хотел упростить написание, ведь условий может быть множество. В некоторых примерах пишут о записях вида
Код
If arg1 = "someText" OR "SomeOtherText" 
Но если я пишу
Код
  If ComboBox3 = "Начисление" Or "Отпуск" Then 
        TextBox1.Visible = True
    Else
        TextBox1.Visible = False
    End If
то получаю ошибку Run-time error 13 Type mismatch Изменение на ComboBox3.Value не помогает.
Или лучше это делать с помощью Case?
 
У Вас неправильный синтаксис. Так надо:
Код
If ComboBox3 = "Начисление" Or ComboBox3 ="Отпуск" Then

Если условий много, можно все условия разместить в массиве и сверяться с ним
 
Код
Private Sub ComboBox3_Change()
    Select Case ComboBox3
        Case "Начисление", "Траты", "Отпуск"
            TextBox1.Visible = True
        Case Else
            TextBox1.Visible = False
    End Select
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Спасибо vikttur к сожалению в тех примерах, что видел просто перечисляли значение, но они были и не к ComboBox
Sanja, большое спасибо за Case.
Изменено: Molov - 01.09.2017 19:42:51
 
Код
Private Sub ComboBox1_Change()
    TextBox1.Visible = InStr(1, "Начисление Траты Отпуск", ComboBox1, vbTextCompare)
End Sub
Изменено: LAD - 02.09.2017 04:06:52
 
LAD, и если будет введено слово пуск или числ то исчезнет текстбокс и кто знает - как минимум это обойдется ненужным миганием, а может и данные попортить.
Я сам - дурнее всякого примера! ...
 
Ну уж если так хочется одной строкой...
Код
Private Sub ComboBox1_Change()
    With Me.ComboBox1
        Me.TextBox1.Visible = IIf((.Value = "Начисление" Or .Value = "Траты" Or .Value = "Отпуск"), 1, 0)
    End With
End Sub
Согласие есть продукт при полном непротивлении сторон
 

kuklp, если в ComboBox не запрещен ввод новых значений, то «ненужные мигания» будут с любым кодом.

Sanja, хотел показать, что иногда возможны несколько вариантов. Кстати самый короткий код не всегда оптимален

 
Цитата
LAD написал: Кстати самый короткий код не всегда оптимален
С этим никто и не спорит. Тоже
Цитата
LAD написал: хотел показать, что иногда возможны несколько вариантов
Согласие есть продукт при полном непротивлении сторон
 
Цитата
LAD написал:
«ненужные мигания» будут с любым кодом
Ваш будет срабатывать от ввода любой буквы из списка, а любой другой из этой темы только при полном совпадении слова. Разницы не видите?
Я сам - дурнее всякого примера! ...
 
Kuklp, пожалуйста  внимательно прочитайте #8, что бы зря не спорить.
Страницы: 1
Читают тему
Наверх