有/无断点的代码运行方式不同

我正在创建一个用户表单(具有写入Excel工作表的SAVE按钮和返回至初始页面的RETURN按钮),并且想要设置/检查标志(如果表单上有未保存的更改)。根据是否设置了断点,我得到的代码功能有所不同。

这是代码的相关部分:

Public saveflag as Boolean

Private Sub UserForm_Initialize()    
    initializeCMAValues Me
    initializeTeamValues Me,getRowNum("CMA","Team",False)
    ' getRowNum is a function that returns the row to read from
    ' in this case,the row with name=CMA,type=Team,createRow=False

    saveflag = False
End Sub

Private Sub btn_Return_Click()
    ' Check for unsaved data
    If saveflag Then
        If MsgBox("You have unsaved information on the form.  Do you wish to save it?",vbYesno,"Unsaved Data") = vbYes Then
            btn_Save_Click
        End If
    End If

    ' Return to splash form
    Unload Me
    Form_Splash.Show
End Sub

如果我输入表单并选择RETURN,则会收到msgbox提示。如果我在saveflag = False行设置了一个断点,请输入表格,选择RETURN(调用断点),继续运行,然后它会按我的期望运行(即没有msgbox)。

我尝试将标志写到表单上的不可见标签上,而不是使用公共的saveflag变量。我也尝试过写入Excel工作表中的单元格。不管有没有断点,这两种行为都给出了相同结果。

我还运行了带有注释的initializeTeamValues行的代码,然后代码运行良好。我已经三重检查了此子例程仅将值填充到表单上的文本框中,而没有其他内容。

一些研究提出了一个与OLE将值推入堆栈有关的模糊答案。然后,我尝试将“ saveflag = False”行放在子例程的开头。结果相同。

为什么行为各不相同?有没有更好/另一种方法来检查未保存的数据?

gjlgjlgjlgjl 回答:有/无断点的代码运行方式不同

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3150817.html

大家都在问