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

时间:2017-05-04 10:20:22

标签: excel vba excel-vba

在我的一个Excel项目中,我有一个"保存检查"如果工作簿在过去25分钟内未保存,则会提示用户采取某些操作(MsgBox)。

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

今天我们看到一个错误消息框的内容(以及" Microsoft Excel"" OK"的其他文本)打印到工作表中,覆盖单元格内容

根据用户的说法,没有宏在后台运行,唯一的操作是在工作表之间切换。这些工作表没有事件触发代码。

我虽然OnTime是安全的方法,但这个错误让我吓坏了。

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

有关我是否应该保留此代码或将其删除的任何评论? 非常感谢提前。

'编辑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

1 个答案:

答案 0 :(得分:2)

对我来说这是最有可能发生的情况:

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

这会在下面的消息中添加一个额外的“Microsoft Excel”和行“---”和“OK”:

---------------------------
Microsoft Excel
---------------------------
Your MsgBox message here …
---------------------------
OK   
---------------------------

当MsgBox启动时,您可以通过按 ctrl + c 轻松地重现这一点。然后将其粘贴到Excel中。

这有两个可能的原因:

  1. 我上面描述的手动复制粘贴方案(最有可能)。
  2. 或者有一个宏在后台运行,当MsgBox启动时执行复制粘贴操作(我不是100%肯定,但我认为这甚至不可能,但如果是这样,你应该能够重现问题)