2015-08-22 7 views
2

Я использую код VBA в Excel, и я создал поле со списком, которое станет красным, и установите фокус на него, когда введенное значение не введено.Общая функция для цветоприемных комбинаций

If cmb = "" Then 
    cmb.BackColor = vbRed 
    lbl.ForeColor = vbRed 
    cmb.SetFocus 
    Exit Sub 

    Else 

    cmb.BackColor = vbWhite 
    lbl.ForeColor = vbBlack 
End If 

Поскольку у меня есть много комбо коробки на моей форме, я хочу построить функцию или процедуру, я могу позвонить в любое поле со списком, что я хочу. Может ли кто-нибудь помочь?

ответ

0

Вот общая функция, которую вы можете передать ComboBox на:

Function ValidateComboBox(c As ComboBox) As Boolean 

    If Len(c.Text) = 0 Then 
     c.BackColor = vbRed 
     Controls(c.Tag).ForeColor = vbRed ' Set associated label color, also 
     c.SetFocus 
     ValidateComboBox = False 
    Else 
     c.BackColor = vbWhite 
     Controls(c.Tag).ForeColor = vbBlack ' Set associated label color, also 
     ValidateComboBox = True 
    End If 

End Function 

Вы называете это, как это, например, когда форма была отправлена:

' [OK] clicked. Submit form... 
Private Sub cmdOK_Click() 

    If Not ValidateComboBox(ComboBox1) Then Exit Sub 
    If Not ValidateComboBox(ComboBox2) Then Exit Sub 
    If Not ValidateComboBox(ComboBox3) Then Exit Sub 
    ... 

End Sub 

Хитрость в том, что вы есть метка, соответствующая каждому комбинированному ящику, которое также необходимо обновить. Вы можете либо спроектировать функцию, чтобы принять управление как ComboBox, так и элемент управления Label и передать их каждый раз, либо воспользовавшись свойством Tag поля со списком, как я уже говорил выше. Для каждого поля со списком просто введите имя соответствующего элемента управления Label в его свойство Tag, используя окно Properties в дизайнере.

Например, если ComboBox1 имеет метку с именем Label1, затем введите "Label1" (без кавычек) в ComboBox1 «s Tag собственности. В приведенной выше процедуре мы будем искать метку/элемент управления с этим именем и соответствующим образом настроить его цвет.

+0

HI Bud, он работал как шарм, только что я не знаю, почему это не тогда, когда я пытаюсь использовать его в TextBox так: Функция ValidateTextBox (T Как TextBox) As Boolean 'If Len (T.Text) = 0 Тогда T.BackColor = vbRed Controls (T.Tag) .ForeColor = vbRed 'Set связанный цвет этикетки, также T.SetFocus ValidateTextBox = False Else T.BackColor = vbWhite Controls (T.Tag) .ForeColor = vbBlack 'Установить соответствующий цвет ярлыка, также ValidateTextBox = True End If – Hamdi

+0

@Ha mdi - Он не работает с TextBox? Вы получаете сообщение об ошибке? Не стесняйтесь публиковать новый вопрос и добавлять свой код, и я могу взглянуть. – Bond

+0

/* Функция ValidateTextBox (T Как TextBox) As Boolean Если Len (T.Text) = 0 Тогда T.BackColor = vbRed Controls (T.Tag) .ForeColor = vbRed 'Set ассоциируется метка цвета, также T .SetFocus ValidateTextBox = False Else T.BackColor = vbWhite Controls (T.Tag) .ForeColor = vbBlack 'Set связанный цвет этикетки, также ValidateTextBox = True End If End Function */ – Hamdi