当其他工作簿打开时,Application.OnTime重新打开工作簿

时间:2019-01-14 13:08:09

标签: excel vba

我有一个计时器,它会在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运行时错误。

希望有人可以帮助我关闭我的工作簿

最诚挚的问候

2 个答案:

答案 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

希望它可以帮助遇到相同问题的人。

最佳国王 索伦