VBScript to loop through Excel-files and change macro

无人久伴 提交于 2020-01-03 06:06:07

问题


I already posted a closely related question last week VBScript to add code to Excel workbook which got solved by a fellow programmer. But I ran into the next problem with that task:

With the following code, I try to loop through a folder of Excel files then open them one by one and change the macro in DieseArbeitsmappe. This works fine for the first file but the second ends with this error message. 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

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

Another problem I will face soon is that sometimes the VBComponent is called ThisWorkbook. So I will have to introduce if-else based on the Error code thrown by Line 10. Or is there a better solution for this?

Thanks in advance for your help.


回答1:


This isn't a perfect answer, as I am more confused than I am certain of the exact problem... However hopefully this will help.

The command objExcel.Quit is going to close the Excel application.

I'm not quite sure how the code (in the next loop) then successfully executes

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

when the objExcel application has been quit. However, the .Visible and .DisplayAlerts will no longer be set True/False. The latter could cause your failure in line 10.

Therefore I suggest replacing

 objExcel.Quit

with

objWorkbook.Close


来源:https://stackoverflow.com/questions/42631259/vbscript-to-loop-through-excel-files-and-change-macro

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!