我有一个Excel 2016工作簿,可以在打开时进行一些验证。我使用的是VSTO,这里是代码片段:
Private Sub ThisWorkbook_Open() Handles Me.Open
Try
If (DoNotOpen()) Then
Me.Close() 'this throws a System.Threading.ThreadAbortException
...
发生的异常不会被吞下,因为它将被重新抛出,如here所述。我理解为什么抛出异常(因为在完成打开之前关闭工作簿)。我正在寻找中止开放的最好方法(我发现我可以通过执行Me.Application.Quit以编程方式完全关闭Excel,但我并不是很舒服,因为代码无法正常退出)。提前谢谢。
答案 0 :(得分:0)
而不是试图关闭(一半)打开的工作簿,而不是考虑以相反的方式工作。只有当您认为它应该处于活动状态时才激活(添加)事件处理程序,以便仅打开正确的工作簿。
还有其他已知的替代方案,其中open事件已到位,一些非常棘手,例如在DoNotOpen()到位时激活Timer,隐藏打开的工作簿以及稍后当计时器触发关闭打开的工作簿时打开工作簿集不可见,并在Excel关闭时关闭而不保存隐藏的工作簿。