Во-первых, я бы использовал событие Enter
вместо события Mouse up
, поэтому то же самое произойдет, когда вы перейдете в элемент управления. Для каждого события Enter
элемента управления просто вызовите эту функцию ShowUnit и введите имя элемента управления.
Private Sub CE2_Enter()
Call ShowUnit(CE2)
End Sub
Private Sub OD1_Enter()
Call ShowUnit(OD1)
End Sub
Private Sub ShowUnit(ByRef oControl As Control)
If InStr(1, oControl.Name, "OD") > 0 Then
UserForm1.inUnit.Visible = True
UserForm1.mmUnit.Visible = False
UserForm1.eaUnit.Visible = False
ElseIf InStr(1, oControl.Name, "CE") > 0 Then
UserForm1.inUnit.Visible = False
UserForm1.mmUnit.Visible = True
UserForm1.eaUnit.Visible = False
Else
UserForm1.inUnit.Visible = False
UserForm1.mmUnit.Visible = False
UserForm1.eaUnit.Visible = True
End If
End Sub
edit: Изменены имена элементов управления, чтобы проиллюстрировать, как использовать код, и возвращенные «OD» и «CE» в функциях instr()
из моих тестовых значений.
Для получения дополнительной информации см. Изображение ниже, чтобы увидеть, что происходит. Синий - это то, как вы можете использовать графический интерфейс, чтобы убедиться, что вы ссылаетесь на событие Controls. Красный цвет означает, что мы передаем полный контроль функции ShowUnit. Фиолетовый показывает, что мы читаем свойство Controls Name для поиска «OD» или «CE», отметим, что они чувствительны к регистру без использования instr(1, UCASE(oControl.Name), "OD") > 0
, поэтому, если ваше имя элемента управления odSomeName, оно не будет иметь метку inUnit виден.