上周我已经发布了一个密切相关的问题VBScript to add code to Excel workbook,这个问题已由一位程序员解决了。但是我遇到了这个任务的下一个问题:
使用以下代码,我尝试遍历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 :(得分:0)
这不是一个完美的答案,因为我比我确定的确切问题更困惑...但希望这会有所帮助。
命令objExcel.Quit
将关闭Excel应用程序。
我不太确定代码(在下一个循环中)如何成功执行
Set objWorkbook = objExcel.Workbooks.Open(sFolder & objFile.Name)
当objExcel
应用程序退出时。但是,.Visible
和.DisplayAlerts
将不再设置为True / False。后者可能导致你在第10行失败。
因此我建议更换
objExcel.Quit
与
objWorkbook.Close