VBA 无论如何要在 TextBox 中的 _Enter 之前执行 _MouseDown?

VBA anyway to execute _MouseDown before _Enter in TextBox?

我的意图是在输入文本框 "bdayBox" 时打开 "birthdate" 用户窗体。并且还希望能够再次打开 "birthdate" 用户窗体(如果它已关闭),方法是在框中单击鼠标,但前提是文本框 "bdayBox" 当前处于活动状态。

我的问题是,如果文本框处于非活动状态并且我用鼠标单击它,_Enter 会在_MouseDown 之前执行。这将打开 "birthdate" 用户窗体两次。 有没有办法在 _Enter 之前执行 _MouseDown 或任何其他方式来做,我想要什么没有双开口?

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

当前代码

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

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

Option Explicit

Private Sub bdayBox_Enter()
    birthdate.Show
End Sub

Private Sub ShowBirthdate_Click()
    birthdate.Show
End Sub