Excel用户窗体中的倒计时计时器不';行不通

Excel用户窗体中的倒计时计时器不';行不通,excel,vba,userform,Excel,Vba,Userform,我有两个相同的工作簿,每个都包含一个UserForm。用户窗体在打开工作簿时启动。每个UserForm都包含一个倒计时计时器,其代码如下所示。我需要UserForms,这样当我在UserForm1上单击Submit按钮时,WorkBook1(和UserForm1)应该关闭,WorkBook2(和UserForm2)应该打开 这是SubmitButton_Click()中的代码: 我已将UserForms的ShowModal属性设置为False,因此它们是无模式的 倒计时计时器代码: Privat

我有两个相同的工作簿,每个都包含一个UserForm。用户窗体在打开工作簿时启动。每个UserForm都包含一个倒计时计时器,其代码如下所示。我需要UserForms,这样当我在UserForm1上单击Submit按钮时,WorkBook1(和UserForm1)应该关闭,WorkBook2(和UserForm2)应该打开

这是SubmitButton_Click()中的代码:

我已将UserForms的ShowModal属性设置为False,因此它们是无模式的

倒计时计时器代码:

Private Sub UserForm_Activate()

Dim T, E, M As Double, S As Double
Const AllowedTime As Double = 50 ' Countdown time in minutes

T = Timer
Do
    E = CDbl(Time) * 24 * 60 * 60 - T
    M = AllowedTime - 1 - Int(E / 60)
    S = 59 - Round((E / 60 - Int(E / 60)) * 60, 0)

    TimeLabel.Caption = Format(CStr(M), "00") & ":" & Format(CStr(S), "00")

    DoEvents
Loop Until (Timer - T) / 60 >= AllowedTime

Unload UserForm1

End Sub
计时器在UserForm1中工作正常。每当我单击Submit按钮时,WorkBook2就会打开并显示UserForm2,但计时器没有运行(它只是在50:00时静止不动)。另外,我注意到,当我手动关闭UserForm1时,VBA编辑器显示表单仍在运行。我每次都要手动按下重置按钮

计时器的代码取自Excel论坛。我对Excel和VBA相当陌生,所以我不知道它是如何工作的。无论如何,我发现无论何时关闭/卸载表单,代码都会在DoEvents处暂停。只有在按下VBA编辑器中的“重置”按钮时,表单才会完全停止


为什么会发生这种情况?有没有办法修好计时器?谢谢。

似乎OP想在一段时间后关闭
Userform1
。由于帖子并未真正说明如何打开
userform1
,我建议测试以下代码: 此代码在普通模块中

Option Explicit
Dim frm As UserForm1
Sub KillUserForm()
    Unload frm
End Sub
Sub Test()

    Set frm = New UserForm1
    Load frm
    frm.Show
    
End Sub

在userform的代码中,您现在将
Unload UserForm1
行替换为
KillUserForm

,乍一看,我想说
Unload UserForm1
中的activate事件中的
UserForm1
会给您带来麻烦。这是因为在模式中打开userform2时,代码执行将停止,并且仅当userform2关闭时才会继续。在vbmodeless中打开userform2,您将不会遇到此问题
userform2。显示vbmodeless
@Storax我尝试删除
卸载UserForm1
,但仍然无效。为了使问题更具体,我已对该问题进行了编辑。
Option Explicit
Dim frm As UserForm1
Sub KillUserForm()
    Unload frm
End Sub
Sub Test()

    Set frm = New UserForm1
    Load frm
    frm.Show
    
End Sub