2017-07-31 52 views
1

我使用Task Scheduler來管理在Workbook X中啓動vba子過程的VBScript。此過程打開兩個其他工作簿並將數據移動到工作簿X並再次關閉它們。程序結果是我需要保存的更新的工作簿X. VBA過程正常工作,並按預期由VBScript觸發。但是,應該保存文件的VBScript部分不起作用。 VBScript是基於我在Stackoverflow.com和其他網站上找到的代碼。 當我打開文件X時,我嘗試用VBScript保存,它讓我決定是否要保存該文件。如果我這樣做,我可以看到上述過程創建的數據已經工作。 我可以在任務管理器中看到我用VBScript創建的Excel實例永遠不會關閉,儘管我試圖在VBScript中執行它。我也嘗試了Save方法,但沒有運氣。我嘗試過不同運行方式的參數。我在本網站和其他網站上搜索該問題如何解決。但是,他們建議使用Save和SaveAs方法,並且我嘗試了使用不同的建議參數配置而沒有成功。退出Excel應用程序的VBScript/VBA受標準Excel事件影響

我現在已經找到了根本原因,但不是解決方案。它與劇本本身無關。在打開的工作簿事件中。 我有激活一個用戶窗體(StartUpForm.Show)的代碼。在關閉和打開事件之前的工作簿中,我調用過程RemoveFilter,它刪除一組過濾數據上的過濾器。如果我將UserForm.Show和Before關閉工作簿事件中的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 
+0

嘗試使用'xlBook.Save'如果您期望覆蓋現有文件 - '.SaveAs'is試圖保存文件 – Dave

+0

謝謝副本爲您的輸入。我試過了。但是,如果您閱讀我編輯的問題描述,您會看到我找到了問題,但不是解決方案。 –

回答

0

嘗試保存到C:驅動器。如果有效,你可能會遇到計劃任務問題。如果任務運行,無論用戶是否登錄,或者它被設置爲使用最高權限,那麼您沒有在您認爲自己的安全環境下運行。在任何一種情況下,作業調度程序都將使用S4U認證,這將阻止您訪問網絡資源。我猜Z:驅動器是映射網絡驅動器。映射的驅動器屬於映射驅動器的用戶,因此除非您以映射驅動器且該用戶已登錄的用戶身份運行,否則它將不可用。

如果您使用「以最高權限運行」,那麼您實際上是在建立在管理員帳戶下運行。這是一個單獨的帳戶,它不會有你的驅動器映射。

Task Security Context

Some Programs Cannot Access Network Locations When UAC Is Enabled

windows 7 scheduled tasks run with highest privileges

+0

感謝您的建議。我做了你建議在我的C盤上運行它。我遇到了同樣的問題,如上所述。但是,這一次,似乎我的努力避免彈出式窗口不起作用。 –