当您以“安全模式”打开另一个文件时,应用程序功能不起作用

时间:2019-09-23 08:47:57

标签: excel vba

我有一个工作簿,每隔x分钟使用Application.OnTime运行一次。
问题是,如果我打开另一个工作簿并出现黄丝带的问题,询问我是否要编辑文件(或宏安全警告),Application.OnTime将停止工作。

还有一个与我的问题非常相似的问题:
Application.ontime failes, when another workbook is open in "safe mode"
但是答案并不是真正的答案,因为那只会跳过该行,并使代码无法按时运行。

即使在安全模式下打开了另一个文件,有什么办法可以允许Application.OnTime运行?

1 个答案:

答案 0 :(得分:1)

我认为这里的解决方案是在另一个Excel实例中打开该冲突工作簿,因此它不会受到其他文件的影响。

要手动打开Excel的新实例,请按住ALT键,然后单击Excel图标。但是在您的情况下,如果有几个人正在使用该文件,则每个人都需要这样做。

我一直在寻找创建一个可以在新实例中打开该文件的BAT文件的方法,但是对于ms-dos命令我一无所知,所以我发布了这个答案,希望有人可以提供帮助。

创建BAT文件非常容易:只需创建一个TXT,键入命令,保存并将文件扩展名更改为BAT。

请注意,我正在使用我的PC路径,因此您需要将其调整为适合您的路径。我已经尝试了很多方法,但无法对其进行管理:

  1. "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"将在新实例中打开Excel
  2. start "excel.exe" "C:\filepath\yourfile.xlsx"将打开文件,但在活动实例中。如果没有实例,它将创建一个新实例,但这在您需要时不起作用
  3. "filepath\yourfile.xlsm"将执行与步骤2相同的操作

所以我一直无法找到确切的命令。但是我非常确定,BAT文件必须有一种方法可以打开一个新的Excel实例(如步骤1中所示),然后在该实例中打开该文件。

关于您的宏,在黑暗中又开了一枪,但是您发布了我有一个工作簿,每隔x分钟就会使用Application.OnTime运行一次。不知道您需要执行多少次,但是也许使用Task Scheduler,您可以自动化该过程,因为Task Scheduler可以选择在新实例中打开文件。

对不起,但找不到确切的命令。我可以在新实例中打开Excel(第1步),并且可以打开特定文件,但是我无法将两者结合在一起。

希望有人可以提供帮助,因此您可以通过双击BAT文件来创建BAT文件,以在不同的实例中执行该冲突工作簿(这样,每个人都不需要记住ALT事情)< / p>

解决方法2:其他方法是从另一个APP执行该Excel文件,因此您可以从VBA创建一个新的Excel实例。我制作了一个简单的Word文件,该文件可在新实例中创建并打开Excel文件,因此您可以使用其余的Excel文件。该代码必须出现在事件Document_Open中。

Private Sub Document_Open()
Application.ScreenUpdating = False
Application.Visible = False
Dim ExcelAPP As Object
Dim ThisWB As Object
Set ExcelAPP = CreateObject("Excel.Application")
ExcelAPP.Visible = False
Set ThisWB = ExcelAPP.Workbooks.Open("filepath\yourfile.xlsm")
ThisWB.Close False
DoEvents
ExcelAPP.Quit
Application.ScreenUpdating = True
Application.Visible = True
Application.Quit False
End Sub

因此,只需打开此Word文件,您的Excel文件就会在新实例中执行并且不可见。

已知失败::如果已经打开了Excel实例,但是没有打开Excel文件(将它们全部关闭),则执行此代码,然后打开一个Excel文件,该Excel文件将在该不可见的实例中打开,因此并不完美。