我有一个计时器,它会在5分钟后关闭我的工作簿。问题是当我有另一个工作簿打开该工作簿时,当我尝试将其关闭时,计时器将重新打开。
我以前的倒数是每秒“滴答”一声,但这弄乱了注释的视图,使它们在每个倒数滴答声中都闪烁。当我收到该通知时,我没有看到重新打开工作簿的任何问题。
我的模块和本工作簿中都有这个
ERROR in ./node_modules/react-native/Libraries/react-native/react-native-implementation.js
这两个代码在我的模块中。计时器显示在单元格中 (Worksheets(“ kode”)。Range(“ H3”))并每10秒倒数
Public gCount as Date
此代码在ThisWorkbook
中Sub Timer()
gCount = Now + TimeValue("00:00:10")
Application.OnTime gCount, "ResetTime"
End Sub
Sub ResetTime()
Dim xRng As Range
If ThisWorkbook.Worksheets("kode").Range("H3") = "" Then GoTo Endsub
Set xRng = Application.ThisWorkbook.Worksheets("kode").Range("H3")
xRng.Value = xRng.Value - TimeSerial(0, 0, 10)
If xRng.Value <= 1.15740740740741E-05 Then
Call SavedAndClose
Exit Sub
End If
Call Timer
Endsub:
End Sub
也有一个位置,将工作表Worksheets(“ kode”)。Range(“ H3”)设置为00:05:01,并将Workbook_SheetSelectionChange重置为00:05:01
当Worksheets(“ kode”)。Range(“ H3”)在00:00:01时,工作表关闭
如果我删除“ On Error Resume Next”,则当我尝试关闭工作簿时,代码将产生1004运行时错误。
希望有人可以帮助我关闭我的工作簿
最诚挚的问候
答案 0 :(得分:1)
如果我删除“ On Error Resume Next”,则当我尝试关闭工作簿时,代码将产生1004运行时错误。
这就是为什么您不应该在各处放置On Error Resume Next
来使错误静默而不是进行修复。
Application.OnTime
可以在一天的不同时间多次安排相同的过程。因此,只有在提供了计划的确切时间后,它才可以取消计划先前的计划条目的时间-如果您提供的时间没有计划的条目,则会出现运行时错误1004。
Now + TimeValue("00:00:10")
都会返回一个不同的值。
如果您希望能够取消先前设置的条目,则将时间存储在模块级变量中,并将该变量用于计划和取消计划。您可以使用模块级的gCount
变量,但是:
Schedule:=False
之前,您用一个无用的新值覆盖了先前存储的值。确保您只有一个gCount
,并且仅在安排呼叫之前而不是在取消安排之前分配给它。
答案 1 :(得分:0)
我找到了自己对GSergs答案的评论的答案:
我用vbYesNoCancel选项制作了一个Msgbox,并在“是”和“否”答案中取消了OnTime事件,并解决了excel中通用的“保存更改”提示。如果按取消,宏将取消。
开头的“ If xRng.Value <= 1.15740740740741E-05然后”可确保如果计时器用完,它将跳过MsgBox并保存。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set xRng = Application.ThisWorkbook.Worksheets("kode").Range("H3")
If xRng.Value <= 1.15740740740741E-05 Then
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Interface").Select
'Hides all sheets but the interface sheet
Sheet2.Visible = False
Sheet3.Visible = False
Sheet6.Visible = False
Sheet7.Visible = False
Sheet8.Visible = False
Application.OnTime gCount, "ResetTime", Schedule:=False
If ThisWorkbook.Saved = False Then
ThisWorkbook.Save
End If
Application.ScreenUpdating = True
GoTo Endsub
Else
End If
Dim intValue As Integer
intValue = MsgBox("Do you want to save changes?", 3, "Save changes?")
If intValue = 6 Then
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Interface").Select
'Hides all sheets but the interface sheet
Sheet2.Visible = False
Sheet3.Visible = False
Sheet6.Visible = False
Sheet7.Visible = False
Sheet8.Visible = False
Application.OnTime gCount, "ResetTime", Schedule:=False
If ThisWorkbook.Saved = False Then
ThisWorkbook.Save
End If
Application.ScreenUpdating = True
ElseIf intValue = 7 Then
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Interface").Select
'Hides all sheets but the interface sheet
Sheet2.Visible = False
Sheet3.Visible = False
Sheet6.Visible = False
Sheet7.Visible = False
Sheet8.Visible = False
Application.OnTime gCount, "ResetTime", Schedule:=False
ThisWorkbook.Saved = True
Application.ScreenUpdating = True
Else
Cancel = True
End If
End Sub
希望它可以帮助遇到相同问题的人。
最佳国王 索伦