上周我已经发布了一个密切相关的问题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
。或者有更好的解决方案吗?
在此先感谢您的帮助。
更换
你可以做到这一点,但写一个专门的函数返回你适当的组件。把错误处理放在这个函数里面(如果错误得到“ThisWorkbook”等等,尝试获得VBComponents(“DieseArbeitsmappe”)) –
备注:替换'objWorkbook.SaveAs“P:\ Administration \ Reports \ operativ \ Tagesbericht \ templates \ START07 \ TestTabsiNeu \''带'objWorkbook.SaveAs sFolder' –