我想监视何时打开excel文件并使用VBA提取文件名。 我想将代码放在另一个excel文件中,而不是打开文件。
我可以使用每1秒运行一次的循环,我计算工作簿的数量 - “workbooks.Count” - 但我想知道是否有另一种方式,也许是使用事件
答案 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