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

은 곧 직면하게 될 또 다른 문제는 때때로 VBComponentThisWorkbook라는 것을 Set component = objworkbook.VBProject.VBComponents("DieseArbeitsmappe")

입니다 라인 (10)가있다. 그래서 라인 10에 던져진 에러 코드를 기반으로 if-else을 소개해야합니다. 아니면 더 나은 해결책이 있습니까?

미리 도움을 주셔서 감사합니다.

+0

objExcel.Quit 

를 교체 제안

라인 (10)에 고장의 원인이 있지만, 당신에게 해당 구성 요소를 반환하는 전용 기능을 작성할 수 있습니다. 오류가 "ThisWorkbook"등을 얻으면 VBComponents ("DieseArbeitsmappe")를 가져 오십시오. –

+0

side note : 'objWorkbook.SaveAs'를 P : \ Administration \ Reports \ operativ \ Tagesbericht \ templates \ START \ 7 \ TestTabsiNeu로 바꿉니다. \ "'with'objWorkbook.SaveAs sFolder' –

답변

0

이것은 정확한 대답이 아닌 것보다 더 혼란 스럽기 때문에 이것은 완벽한 대답은 아닙니다. 그러나 희망적으로 도움이 될 것입니다.

objExcel.Quit 명령은 Excel 응용 프로그램을 닫습니다.

은 내가 objExcel 응용 프로그램이 종료 된 경우 (다음 루프에서) 코드가 성공적

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

을 실행하는 방법을 아주 확실하지 않다. 그러나 .Visible.DisplayAlerts은 더 이상 True/False로 설정되지 않습니다. 후자는 그러므로 나는 당신이 그렇게 할 수

objWorkbook.Close 
+0

고맙습니다. 'objExcel.Quit'를'objWorkbook.Close'로 바꾸면 주된 문제가 해결되었습니다. – CodeChimpy

관련 문제