当且仅当目标文件关闭或由本地VBA宏打开时,我想运行一段特定的代码。如果文件由网络上的其他用户打开,则代码不应运行。我可以告诉一个文件是否由本地宏打开 - 或者,我可以找到谁是实例化文件的调用者或父母?
到目前为止,我有这个测试代码:
Sub refreshAll()
Dim wbIsOpen As Boolean, wbIsOpenByMe As Boolean
Dim fileName As String, filePath As String
Dim testWb As Workbook
fileName = "test.xlsm"
If IsWorkBookOpen(ThisWorkbook.Path & "\" & fileName) Then wbIsOpen = True
On Error Resume Next
Set testWb = Workbooks(fileName)
If Not testWb Is Nothing Then wbIsOpenByMe = True
Err.Clear
On Error GoTo 0
If wbIsOpen = False Or wbIsOpenByMe = True Then
ThisWorkbook.Connections("testcon").OLEDBConnection.BackgroundQuery = False
ThisWorkbook.refreshAll
DoEvents
End If
End Sub
这种解决方法一种-的排序-的作品,不同的是它不能告诉文件是否是手动或通过一些程序代理人开立。有没有办法做到这一点,还是有更简单的方法来做我在我的代码中尝试做的事情?
THRE没有告诉在目前的情况下打开工作簿是否由用户或代码打开,除非代码设置某种标志的方式。为什么它作为一个利益的事情有所作为? – Rory
'ThisWorkbook'需要执行一些计算并仅在某些条件下(当被“中央”文件调用时)刷新某些数据连接。如果无法读取文件是否以vba打开,我必须添加冗长的冗余。必要性源于连接 - 刷新:如果数据连接的来源在刷新尝试时不可用,则Excel会尝试打开文件的本地副本,从而中断宏的流向。所以我必须编写一个例程来捕捉这种情况,并在后台打开文件以避免代码停止。 – Vegard
续。我担心调用文件会调用本地打开的工作簿的宏,因为我之前有过时间问题(在工作簿打开之前调用宏),所以我使用了宏初始化有问题的文件的“Workbook_Open”。因此,希望知道谁/什么打开了文件。 – Vegard