在我的一个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
答案 0 :(得分:2)
对我来说这是最有可能发生的情况:
想象一下有人在您的工作簿中执行了一些复制粘贴操作。他没有在屏幕上看,而是在键盘上,因为他不熟悉打字。弹出MsgBox(他没有注意到,仍然盯着键盘)。他不小心复制了MsgBox ctrl + c 的内容并将其粘贴到工作簿中。
这会在下面的消息中添加一个额外的“Microsoft Excel”和行“---”和“OK”:
---------------------------
Microsoft Excel
---------------------------
Your MsgBox message here …
---------------------------
OK
---------------------------
当MsgBox启动时,您可以通过按 ctrl + c 轻松地重现这一点。然后将其粘贴到Excel中。
这有两个可能的原因: