VBScript / VBA退出Excel应用程序受标准Excel事件的影响

我使用任务计划程序来pipe理在工作簿X中启动VBA子过程的VBScript。此过程将打开两个其他工作簿并将数据移动到工作簿X并再次closures它们。 程序结果是我需要保存的更新的工作簿X. VBA过程正常工作,并按预期由VBScript触发。 但是,应保存该文件的VBScript的部分不起作用。 VBScript是基于我在Stackoverflow.com和其他网站上find的代码。 当我打开文件XI试图用VBScript保存时,它要求我决定是否要保存文件。 如果我这样做,我可以看到上面的程序创build的数据已经工作。 我可以在任务pipe理器中看到,我用VBScript创build的Excel实例永远不会closures,尽pipe我试图在VBScript中完成。 我也尝试了Save方法,但没有运气。 我已经尝试了不幸的方法不同的参数。 我有search这个网站和其他网站的问题是如何解决的。 但是,他们build议使用Save和SaveAs方法,并且我尝试了不同的build议参数configuration,但没有成功。

现在我find了根本原因,但没有find解决办法。 这与剧本本身无关。 在打开的工作簿事件中。 我有激活一个用户窗体(StartUpForm.Show)的代码。 在closures和打开事件之前的工作簿中,我调用过程RemoveFilter,它将删除一组过滤的数据上的filter。 如果我将UserForm.Show和RemoveFilter标记为符号,它将起作用。 避免调用StartUpForm.Show是不够的。 StartUpForm.Show需要标记为符号或删除。 怎么可能? 有没有解决方法?

这不起作用:

Private Sub Workbook_Open() Dim batRun As Boolean RemoveFilter ResolveStartUp (batRun) If Not batRun Then StartUpForm.Show vbModal End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) RemoveFilter End Sub 

这工作:

 Private Sub Workbook_Open() Dim batRun As Boolean RemoveFilter ResolveStartUp (batRun) If Not batRun Then ' StartUpForm.Show vbModal End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) ' RemoveFilter End Sub 

VBScript中:

 On Error Resume Next ImportAccesFilesToHolidaysAndWorkshops Sub ImportAccesFilesToHolidaysAndWorkshops() Dim xlApp Dim xlBook Set xlApp = CreateObject("Excel.Application") xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Open ("Z:\ResourceManagement\Holiday and workshops input.xlsm", 0, False,,,,,,,,True) xlApp.Run "ImportResourcesAndProjects" xlApp.ActiveWorkbook.Close xlBook.SaveAs "Z:\ResourceManagement\Holiday and workshops input.xlsm",,,,,,xlExclusive, xlLocalSessionChanges xlBook.Close Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing WScript.Echo "Finished." WScript.Quit End Sub 

尝试保存到您的C:驱动器。 如果这样做,你可能会遇到一个计划任务的问题。 如果任务运行,无论用户是否login,或者设置为使用最高权限,则不会在您认为自己的安全环境下运行。 在任何一种情况下,作业调度程序都将使用S4Uauthentication,这将阻止您访问networking资源。 我猜测Z:驱动器是映射的networking驱动器。 映射的驱动器属于映射驱动器的用户,因此除非您以映射驱动器的用户身份运行并且该用户已login,否则该驱动器将不可用。

如果您使用“以最高权限运行”,则实际上是在内置的pipe理员帐户下运行的。 这是一个单独的帐户,它不会有你的驱动器映射。

任务安全上下文

UAC启用时,某些程序无法访问networking位置

Windows 7计划任务以最高权限运行