Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 不活动后的触发代码_Vba_Excel - Fatal编程技术网

Vba 不活动后的触发代码

Vba 不活动后的触发代码,vba,excel,Vba,Excel,我希望我的WB在非活动时间后触发一些代码(当然是由我设置的)。我只能找到在非活动时间后关闭WB的代码,但我希望代码能够执行其他操作,而不是关闭WB。我找到了关闭WB的代码: 此工作簿模块: Private Sub Workbook_BeforeClose(Cancel As Boolean) stop_Countdown ThisWorkbook.Save End Sub Private Sub Workbook_Open() start_Countdown End Su

我希望我的WB在非活动时间后触发一些代码(当然是由我设置的)。我只能找到在非活动时间后关闭WB的代码,但我希望代码能够执行其他操作,而不是关闭WB。我找到了关闭WB的代码:

此工作簿模块:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    stop_Countdown
ThisWorkbook.Save
End Sub
Private Sub Workbook_Open()
    start_Countdown
    End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    stop_Countdown
    start_Countdown
    End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    stop_Countdown
    start_Countdown
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
  ByVal Target As Excel.Range)
    stop_Countdown
    start_Countdown
End Sub
常规模块:

Option Explicit
Public Close_Time As Date
Sub start_Countdown()
    Close_Time = Now() + TimeValue("00:00:10")
    Application.OnTime Close_Time, "close_WB"
    End Sub
Sub stop_Countdown()
    Application.OnTime Close_Time, "close_WB", , False
    End Sub
Sub close_wb()
    ThisWorkbook.Close True
    End Sub

在代码的哪一部分中,我应该介绍我希望WB在不活动后执行的事件,而不是关闭WB?

您需要在常规模块中进行更改

您不必在
应用程序.OnTime
函数调用中传递字符串
close_wb()
,而必须指定包含要执行的任何操作的过程的名称

以下是开始使用的代码:

Option Explicit
Public Inactivity_Time As Date

Sub start_Countdown()
    Inactivity_Time = Now() + TimeValue("00:00:10")
    Application.OnTime Inactivity_Time, "my_procedure"    ' <- Notice that I changed the name of the procedure here
End Sub

Sub stop_Countdown()
    On Error Resume Next
    Application.OnTime Inactivity_Time, "my_procedure", , False     ' <- And here too.
    On Error GoTo 0
End Sub

Sub my_procedure()
    ' The code to perform you event goes here
End Sub
并添加以下程序:

Public Sub Close_WB()
    stop_CountDown
    ThisWorkbook.Close SaveChanges:=True
End Sub

调用
工作簿时,请确保
Application.EnableEvents=true
。打开
对不起,问题写得不正确。这就是我需要帮助的地方,请再读一遍。你能解决你的问题吗?如果是,请接受帮助您的答案或创建您自己的答案。让我们不断更新!请看一下聊天@OscarAnthony@OscarAnthony同一作者提出的两个问题都是关于在一段时间的活动后运行事件。除了close_wb()过程之外,我是否应该更改其他内容?我的意思是,我在哪里调用程序myProcedure()?您实际上不需要手动调用
myu procedure()
。Excel自动运行函数
Application.OnTime
的字符串参数中指定的过程。例如,如果您想运行另一个过程,只需将
应用程序的函数调用中的
“my_procedure”
部分替换为所需的另一个过程的名称。此工作簿中的代码保持不变?我这样做了,在关闭工作簿后出现此错误:运行时错误“1004”
Public Sub Close_WB()
    stop_CountDown
    ThisWorkbook.Close SaveChanges:=True
End Sub