使用VBA打开excelfile时监视

时间:2016-01-02 19:24:19

标签: vba file events

我想监视何时打开excel文件并使用VBA提取文件名。 我想将代码放在另一个excel文件中,而不是打开文件。

我可以使用每1秒运行一次的循环,我计算工作簿的数量 - “workbooks.Count” - 但我想知道是否有另一种方式,也许是使用事件

1 个答案:

答案 0 :(得分:2)

您可以使用事件Application.OnWindow

,而不是运行每一秒钟的计时器

打开新工作簿时会激活此事件,但只要焦点从一个工作簿更改为另一个工作簿,也会激活此事件。因此,为了跟踪会话期间打开的所有工作簿的名称,您需要将它们放在Collection中,以便每个名称只添加一次。

将以下代码添加到代码模块中:

Public openedFiles As New Collection

Sub StartTracking() '<~~ run this macro to start tracking any opened workbook
    Application.OnWindow = "OnWnd"
End Sub
Sub StopTracking() '<~~ run this macro to stop the tracking
    Application.OnWindow = ""
End Sub

Sub OnWnd()
    If ActiveWorkbook Is ThisWorkbook Then Exit Sub
    For Each x In openedFiles
        If x = ActiveWorkbook.fullName Then Exit Sub
    Next

    openedFiles.Add ActiveWorkbook.fullName

    ' An example usage: display the names of the files opened during session
    Dim s As String: s = "workbooks opened so far: " & vbCrLf
    For Each F In openedFiles
        s = s & vbCrLf & F
    Next
    MsgBox s
End Sub