2017-03-06 59 views
0

上週我已經發布了一個密切相關的問題VBScript to add code to Excel workbook由一位程序員解決了。但我遇到了下一個問題:VBScript通過Excel文件循環並更改宏

用下面的代碼,我嘗試循環訪問Excel文件的文件夾,然後逐個打開它們,並在DieseArbeitsmappe中更改宏。這適用於第一個文件,但第二個文件以此錯誤消息結束。 Error message

Set objFSO = CreateObject("Scripting.FileSystemObject") 
sFolder = "P:\Administration\Reports\operativ\Tagesbericht\templates\START07\TestTabsiNeu\" 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
objExcel.DisplayAlerts = False 

For Each objFile In objFSO.GetFolder(sFolder).Files 
    Set objWorkbook = objExcel.Workbooks.Open(sFolder & objFile.Name) 

    Set component = objworkbook.VBProject.VBComponents("DieseArbeitsmappe") 

     strCode = _ 
     "Sub WorkBook_Open() 'just for testing" & vbCr & _ 
     " Application.Run (""'CommonMacro.xlsm'!Workbook_Open"")" & vbCr & _ 
     "End Sub" 
     component.CodeModule.AddFromString strCode 

    objWorkbook.SaveAs "P:\Administration\Reports\operativ\Tagesbericht\templates\START07\TestTabsiNeu\" & objFile.Name 
    objExcel.Quit 

    Set objWorkbook = Nothing 
    Set component = Nothing 

Next 

Set objFSO = Nothing 
Set objExcel = Nothing 

線10 Set component = objworkbook.VBProject.VBComponents("DieseArbeitsmappe")

我即將面臨的另一個問題是,有時VBComponent被稱爲ThisWorkbook。所以我將不得不根據第10行拋出的錯誤碼引入if-else。或者有更好的解決方案嗎?

在此先感謝您的幫助。

+0

更換

objExcel.Quit 

你可以做到這一點,但寫一個專門的函數返回你適當的組件。把錯誤處理放在這個函數裏面(如果錯誤得到「ThisWorkbook」等等,嘗試獲得VBComponents(「DieseArbeitsmappe」)) –

+0

備註:替換'objWorkbook.SaveAs「P:\ Administration \ Reports \ operativ \ Tagesbericht \ templates \ START07 \ TestTabsiNeu \''帶'objWorkbook.SaveAs sFolder' –

回答

0

這不是一個完美的答案,因爲我比我確定的確切問題更困惑......但希望這會有所幫助。

命令objExcel.Quit將關閉Excel應用程序。

我不太知道如何代碼(下一個循環),那麼成功執行

Set objWorkbook = objExcel.Workbooks.Open(sFolder & objFile.Name) 

objExcel應用程序已退出。但是,.Visible.DisplayAlerts將不再設置爲True/False。後者可能會導致你的失敗在第10行

因此,我建議用

objWorkbook.Close 
+0

謝謝。用'objWorkbook.Close'代替'objExcel.Quit'解決了主要問題。 – CodeChimpy