Vba Excel错误消息框输出写入单元格

Vba Excel错误消息框输出写入单元格,vba,excel,Vba,Excel,在我的一个Excel项目中,我有一个“保存检查”功能,如果工作簿在过去25分钟内没有保存,它将提示用户采取一些操作(MsgBox) 此方法调用Application.OnTime来计划下一个警报,并在保存后重新计划 今天我们看到一个错误,消息框的内容(以及带有“Microsoft Excel”和“OK”的附加文本)被打印到工作表中,覆盖了单元格内容 据用户称,没有宏在后台运行,所采取的唯一行动是在工作表之间切换。这些工作表没有事件触发代码 我原以为OnTime是一种安全的方法,但那个bug把我吓

在我的一个Excel项目中,我有一个“保存检查”功能,如果工作簿在过去25分钟内没有保存,它将提示用户采取一些操作(
MsgBox

此方法调用
Application.OnTime
来计划下一个警报,并在保存后重新计划

今天我们看到一个错误,消息框的内容(以及带有“Microsoft Excel”和“OK”的附加文本)被打印到工作表中,覆盖了单元格内容

据用户称,没有宏在后台运行,所采取的唯一行动是在工作表之间切换。这些工作表没有事件触发代码

我原以为
OnTime
是一种安全的方法,但那个bug把我吓坏了

我做了一些研究,试图找到关于这个问题的文档,但没有。我相信这一定是一个低概率的事件,可能一生只发生一次

关于我应该保留或删除此代码有何评论?
非常感谢

'编辑1-添加由
OnTime
函数调用的代码

Public Sub NeedToBeSaved()
' ======================================================================
' Description : Periodically checks if the workbook needs to be saved.
'
' Comments    : AfterSave method takes care of scheduling new check.
'               Refresh it only if user has not saved
' ======================================================================
    Dim nme As Name
    Dim dteLastSaved As Date

    Set nme = ThisWorkbook.Names(gsRNGNAME_LASTSAVED)
    dteLastSaved = Mid$(nme.value, 2)

    ' Debug Log
    ' ---------
    Debug.Print "----------------------"
    Debug.Print "Saving Periodic Check"
    Debug.Print "----------------------"
    Debug.Print "Worbook is saved:" & vbTab & ThisWorkbook.saved
    Debug.Print "Last time       :" & vbTab & dteLastSaved

    If (ThisWorkbook.saved = False) Then
        MsgBox "File has not been saved in the last " & glAPP_SAVED_FREQ & _
                " minutes, please consider saving your changes. " & _
                vbCrLf & "(To prevent this message open in read-only mode)"

        Call SaveOnTimeCheck

    Else
        Debug.Print "Not rescheduled"
    End If
End Sub

对我来说,这是最可能的情况:

假设有人在您的工作簿中执行复制粘贴操作。他不看屏幕,而是看键盘,因为他不熟悉打字。MsgBox弹出(他没有注意到,仍然盯着keybord)。他不小心复制了MsgBox ctrl+c的内容并将其粘贴到工作簿中

这会在邮件中添加额外的“Microsoft Excel”和“--”和“OK”,如下所示:

---------------------------
Microsoft Excel
---------------------------
Your MsgBox message here …
---------------------------
OK   
---------------------------
当MsgBox启动时,您可以通过按ctrl+c来轻松地复制此操作。然后将其粘贴到Excel中

这可能有两个原因:

  • 上面描述的手动复制粘贴场景(很可能)
  • 或者,当MsgBox启动时,有一个宏在后台运行,执行复制粘贴操作(我不是100%确定,但我认为这甚至是不可能的,但如果是这样,您应该能够重现该问题)

  • 对我来说,这是最可能的情况:

    假设有人在您的工作簿中执行复制粘贴操作。他不看屏幕,而是看键盘,因为他不熟悉打字。MsgBox弹出(他没有注意到,仍然盯着keybord)。他不小心复制了MsgBox ctrl+c的内容并将其粘贴到工作簿中

    这会在邮件中添加额外的“Microsoft Excel”和“--”和“OK”,如下所示:

    ---------------------------
    Microsoft Excel
    ---------------------------
    Your MsgBox message here …
    ---------------------------
    OK   
    ---------------------------
    
    当MsgBox启动时,您可以通过按ctrl+c来轻松地复制此操作。然后将其粘贴到Excel中

    这可能有两个原因:

  • 上面描述的手动复制粘贴场景(很可能)
  • 或者,当MsgBox启动时,有一个宏在后台运行,执行复制粘贴操作(我不是100%确定,但我认为这甚至是不可能的,但如果是这样,您应该能够重现该问题)

  • Charlie-你需要编辑问题并在调用
    OnTime
    时包含代码。“覆盖单元格内容”--你是说单元格内容在屏幕上被遮挡/覆盖了,还是实际单元格内容被更改了?要添加我正在使用的代码吗?请稍候。问题是,实际的单元格内容被应该在消息框中打印出来的字符串更改了。你的病毒防护有多好?这实际上是一个很好的观点。我在两台不同的计算机上运行了多次检查。但不确定相关计算机是否具有不同的安全策略。Will check.Charlie-你需要编辑问题并在调用时包含代码。
    OnTime
    覆盖单元格内容”-你是说单元格内容在屏幕上被遮挡/覆盖了,还是实际单元格内容被更改了?要添加我正在使用的代码吗?请稍等。问题是,实际的单元格内容被应该在消息框中打印出来的字符串更改了。你的病毒防护有多好?这实际上是一个很好的观点。我在两台不同的计算机上运行了多次检查。但不确定相关计算机是否具有不同的安全策略。我会检查的。哈哈,这正是消息。。。我从未检查过是否可以从消息框中复制值(clap-clap)。我刚刚与用户确认,他说他确实在及时复制/粘贴。非常感谢你的回答!哈哈,这正是信息。。。我从未检查过是否可以从消息框中复制值(clap-clap)。我刚刚与用户确认,他说他确实在及时复制/粘贴。非常感谢你的回答!