2017-03-06 57 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