鼠标悬停在文本框或组合框中时,使单元可见

时间:2018-08-28 16:44:26

标签: excel vba combobox textbox userform

enter image description here,我有一个用户表单,要求将其输入到各种文本框和组合框。输入用于测量,并具有与之关联的单位。我希望用户窗体显示当您单击每个特定的文本/组合框时预期使用的单位。

当前,我的代码适用于文本框,但无法识别组合框。这是我的代码。

Private Sub TextboxActions_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If InStr(1, TextboxActions.Name, "OD") > 0 Then
    UserForm1.inUnit.Visible = True
    UserForm1.mmUnit.Visible = False
    UserForm1.eaUnit.Visible = False

ElseIf InStr(1, TextboxActions.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

使用此选项,当用户单击文本框时,它将以mm或ea为单位显示单位。我也希望组合框也是如此,但是当前在单击组合框时什么也没有发生。

2 个答案:

答案 0 :(得分:2)

首先,我将使用Enter事件而不是Mouse up事件,因此当您按Tab键进入控件时也会发生相同的情况。对于每个控件的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:更改了控件名称以说明如何使用代码,并从测试值中的instr()函数中返回了“ OD”和“ CE”。

有关其他说明,请参见下图,了解发生了什么情况。蓝色是您可以使用GUI来确保您引用控件事件的方式。红色表示我们已将完整的控件传递给ShowUnit函数。 Purple表示我们正在读取Controls Name属性以搜索“ OD”或“ CE”,请注意,它们不区分大小写而不使用instr(1, UCASE(oControl.Name), "OD") > 0,因此,如果您的控件名称为odSomeName,则不会inUnit标签可见。

enter image description here

答案 1 :(得分:2)

使用3个Enter()事件对我有用:

Private Sub ComboBox1_Enter()

UserForm1.Label1.Visible = True
UserForm1.Label2.Visible = False
UserForm1.Label3.Visible = False

End Sub
Private Sub ComboBox2_Enter()

UserForm1.Label1.Visible = False
UserForm1.Label2.Visible = True
UserForm1.Label3.Visible = False

End Sub
Private Sub ComboBox3_Enter()

UserForm1.Label1.Visible = False
UserForm1.Label2.Visible = False
UserForm1.Label3.Visible = True

End Sub

在组合框中单击的示例(在顶部的用户窗体ComboBox1中处于活动状态,在第二个用户窗体ComboBox3中处于活动状态,等等)

img