首页 > 解决方案 > VBA 无论如何要在 TextBox 中的 _Enter 之前执行 _MouseDown?

问题描述

我的意图是在输入文本框“bdayBox”时打开“生日”用户表单。并且还希望能够再次打开“生日”用户窗体,如果它已关闭,则通过在框内单击鼠标,但前提是文本框“bdayBox”当前处于活动状态。

我的问题是,如果文本框未处于活动状态并且我用鼠标单击它,则_Enter 在_MouseDown 之前执行。这会打开两次“生日”用户表单。有没有办法在 _Enter 之前执行 _MouseDown 或任何其他方法,我想要什么没有双开口?

*编辑在用户到达输入的出生日期之前,他们选择应该添加多少人。只有当用户输入 'bdayBox' 文本框时,如果要添加的人超过 1 个并且它应该自动出现,那么“生日”表格应该只显示出来。如果只有 1 个人,则不会出现额外的表格,用户在文本框中输入出生日期。我想从用户那里决定是否打开“生日”表格。

当前代码

Public bdayBoxAct As Boolean

Public Sub bdayBox_Enter()   
    birthdate.Show
    bdayBoxAct = True
End Sub

Public Sub bdayBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    bdayBoxAct = False
End Sub

Private Sub bdayBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If bdayBoxAct = True Then
        birthdate.Show
    End If
End Sub

Public Sub UserForm_Initialize()
    bdayBoxAct = False
End Sub

标签: excelvbatextbox

解决方案


我觉得这种方法对用户来说并不直观,并且会受到您遇到的症状的影响。我的建议是在文本框旁边放置一个按钮bdayBox,并带有适当的标题,告诉用户该按钮将做什么,他们可以在需要表单出现时按下该按钮。该按钮替换了 MouseDown 逻辑。然后您的代码变为:

Option Explicit

Private Sub bdayBox_Enter()
    birthdate.Show
End Sub

Private Sub ShowBirthdate_Click()
    birthdate.Show
End Sub

推荐阅读