文件已关闭时,Excel VBA自动运行

张俊|

我有一个Excel文件,当用户打开文件时,该文件应每30分钟自动运行一次功能并关闭文件。

具体来说,我在ThisWorkbook对象下有以下代码

Private Sub Workbook_Open()
TimeOpened = Now
Application.OnTime TimeOpened + TimeValue("00:30:00"), "Check_Average_NA"
Application.OnTime TimeOpened + TimeValue("01:00:00"), "Check_Average_NA"
Application.OnTime TimeOpened + TimeValue("01:30:00"), "Check_Average_NA"
Application.OnTime TimeOpened + TimeValue("02:00:00"), "Check_Average_NA"
Application.OnTime TimeOpened + TimeValue("02:30:00"), "Check_Average_NA"
Application.OnTime TimeOpened + TimeValue("03:00:00"), "Check_Average_NA"
End Sub

该功能Check_Average_NA另存Module1

Sub Check_Average_NA()

Dim Avg As Double, Na As Long
Dim LastAvgRow As Integer, LastNaRow As Integer, LastTimeRow As Integer


Avg = Application.WorksheetFunction.Average(Workbooks("Holdings_Pricing - Dec").Worksheets("Missing dates").Range("A1:XFD10000"))
Na = Application.WorksheetFunction.CountIf(Workbooks("Holdings_Pricing - Dec").Worksheets("Missing dates").Range("A1:XFD10000"), "#N/A N/A")

LastAvgRow = Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(1000, 1).End(xlUp).Row
LastNaRow = Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(1000, 2).End(xlUp).Row
LastTimeRow = Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(1000, 3).End(xlUp).Row

Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastAvgRow + 1, 1) = Avg
Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastNaRow + 1, 2) = Na
Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastTimeRow + 1, 3) = Now

If LastAvgRow = 10 And LastNaRow = 10 Then

Else
    If Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastAvgRow, 1) = Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastAvgRow + 1, 1) And Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastNaRow, 2) = Workbooks("Holdings_Pricing - Dec").Worksheets("Input, Average, NA").Cells(LastNaRow + 1, 2) Then
        With Workbooks("Holdings_Pricing - Dec").Worksheets("Missing dates").UsedRange
            .Value = .Value
        End With
    Workbooks("Holdings_Pricing - Dec").Save
    Application.Quit
End If

End If
End Sub

所以我要做的是每30分钟检查一次平均值并计算“#N / AN / A”的数量,将其记录在工作Input, Average, NA表中,如果值与值相同,则保存并关闭文件30分钟前录制的

问题是..当我不需要打开此文件并因此将其关闭时,该文件会随机打开自身并尝试运行代码。有谁知道为什么会发生以及如何预防呢?

谢谢。

蒂姆·威廉姆斯

像这样(未经测试)

在本工作簿中:

Private Sub Workbook_Open()
    StartTimer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    StopTimer
End Sub

在常规模块中:

Const MACRO_NAME As String = "Check_Average_NA"

Dim colTimes As Collection 'global to store scheduled times

Sub StartTimer()
    Dim arrTimes, e, t
    arrTimes = Array("01:00:00", "01:30:00", "02:00:00", "02:30:00", "03:00:00")
    Set colTimes = New Collection
    For Each e In arrTimes
        t = Now + TimeValue(e)
        Application.OnTime t, MACRO_NAME
        colTimes.Add t
    Next e
End Sub

Sub StopTimer()
    Dim t
    If Not colTimes Is Nothing Then
        For Each t In colTimes
            Application.OnTime t, MACRO_NAME, schedule:=False '<< cancel the timer
        Next t
    End If
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel工作簿打开时自动运行VBA代码

使用 VBA 脚本自动运行 Excel,并根据日期掩码自动插入文件

在工作簿上打开Excel VBA自动运行宏

启动 Autocad 并使用 .bat 文件自动运行 VBA

关闭文件Excel 2010 VBA时进行备份

如何配置VS Code在切换分支时自动关闭已删除的文件?

从Access 2013运行Excel 2013宏时发生VBA自动化错误(系统调用失败)

在Project 2010中运行Excel 2016 VBA时出现``未注册自动化错误库''

打开 Excel 工作簿时自动运行两个 vba 代码

从Access vba关闭Excel文件

VBA Excel宏消息框自动关闭

VBA:运行时自动化错误-“代码执行已中断”

单击超链接“发送”时如何自动保存和关闭Excel文件

范围中任何单元格中的值更改时自动运行Excel VBA

在Excel VBA的公式中自动定义的一组范围上运行公式

访问VBA(打开Excel文件并关闭):关闭“文件现在可用”

自动分组Excel VBA

Excel VBA自动筛选

自动时间调整功能已关闭(7小时)

打开文件时自动关闭NERDtree

如何在自动关闭已删除的文件之前让pycharm询问

在文件上备份关闭Excel VBA

关闭Excel文件后,“删除”了VBA宏

Vba Excel从关闭的文件执行vlookup

如何导入某些库时自动关闭python文件关闭?

在大型数据集上运行spark时,“ sparkContext已关闭”

为什么关闭Outlook时Excel VBA的运行速度明显更快?

USB连接时自动运行python文件

如何在Excel VBA中读取XML自动关闭标记?