0
我想要监视何时打开excel文件并使用VBA提取文件名。 我想将代码放在另一个excel文件中,而不是打开文件。使用VBA打开excelfile时的监视
我可以使用运行每1秒,我算的工作簿的数字环路 - “workbooks.Count” - 但是,我不知道是否有另一种方式,也许用事件
我想要监视何时打开excel文件并使用VBA提取文件名。 我想将代码放在另一个excel文件中,而不是打开文件。使用VBA打开excelfile时的监视
我可以使用运行每1秒,我算的工作簿的数字环路 - “workbooks.Count” - 但是,我不知道是否有另一种方式,也许用事件
而不是运行每秒一次的计时器,您可以使用事件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
我以前从未见过的OnWindow事件。有趣的是,不需要应用程序事件。我看到这是用Excel 2013添加的。 –
@DougGlancy感谢您的评论。此外,我有Excel 2010,它有它。我不知道什么时候它确实存在... –
好的解决方案 但是我还有一个额外的问题。如果一个文件关闭后再打开,那么它将不会被监控,因为我了解您的代码。 – user3357510