Excel 如何在处理其他工作簿时在后台运行(长)VBA宏

Excel 如何在处理其他工作簿时在后台运行(长)VBA宏,excel,vba,Excel,Vba,我有一个用例,我不能想出一个解决方案来实现和处理它 我的应用程序(第一个工作簿文件)代码处理一个长文件。它需要很长时间(比如说15分钟)并且让用户厌烦等待结束。进程运行时,用户切换到另一个工作簿(第二个工作簿文件) 当流程结束时,应用程序使用了对第一个工作簿中的工作表的引用,结果失败了。我如何在不硬编码第一个文件名的情况下处理这种情况 问题是宏在第一个工作簿工作表中运行进程。 工作簿名称通过全局字符串gsWkbName存储在应用程序代码中,如下所示 Public gsWkbName as Str

我有一个用例,我不能想出一个解决方案来实现和处理它

我的应用程序(第一个工作簿文件)代码处理一个长文件。它需要很长时间(比如说15分钟)并且让用户厌烦等待结束。进程运行时,用户切换到另一个工作簿(第二个工作簿文件)

当流程结束时,应用程序使用了对第一个工作簿中的工作表的引用,结果失败了。我如何在不硬编码第一个文件名的情况下处理这种情况

问题是宏在第一个工作簿工作表中运行进程。 工作簿名称通过全局字符串gsWkbName存储在应用程序代码中,如下所示

Public gsWkbName as String
gsWkbName = ActiveWorkbook.Name()
在运行任何有意义的代码之前,在“工作簿\激活”和“工作簿\打开”中打开工作簿时,将执行该代码

当应用程序需要访问工作表时,我使用以下代码

Dim wks as Worksheet
With Application.Workbooks(gsWkbName)
  Set wks = .Sheets('somesheet')

End With 
当当前工作簿不是第一个工作簿时,我观察到多个错误。 如果第一个工作簿是当前工作簿,我不知道。 第二个工作簿没有运行代码(根据wat,我没有尝试过有运行代码的情况)


Thx@DarrenBartrup-Cook

优化代码以减少运行时间。您如何引用第一个工作簿?Scott有一个正确的想法,你应该优化你的代码,让它运行得更快……我想@ScottHoltzman没有回答这个问题:)。优化代码不会记住第一个工作簿引用。将工作簿引用传递给一个变量,并将该值保持到最后,谢谢您的更正。我说mcve是出于习惯。我想说的是提供有问题的代码,而OP在这里没有做到。@DarrenBartrup Cook-我把这个问题理解为“这个过程需要很长时间,用户可能会在运行时点击第二个工作簿”。
Application.Workbooks(ThisWorkbook.Name()).Sheets('somesheet‌​') made it up