일부 장기 실행 VBA 코드 (하루 24 시간 실행)를 수행하는 동안 가끔 Excel이 중단되거나 충돌하며 Excel을 프로그래밍 방식으로 다시 시작하는 방법을 검토하고 있습니다. 이에 대해 최선의 방법에 대한 조언을 주시면 감사하겠습니다.
내가 가진 한 가지 아이디어는 '이벤트 이름 : APPCRASH'및 '오류있는 애플리케이션 EXCEL.EXE'와 같은 Windows 로깅 오류 이벤트에 의해 잠재적으로 트리거 될 수있는 dotnet 앱을 작성하는 것이지만 이것이 가능한지 모르겠습니다. / 합리적인 방법입니다.
현명한 접근 방식이라면 앱이 잠재적으로 다음 작업을 수행 할 수 있다고 생각합니다.
1) "문제에 대한 자세한 정보를 보내시겠습니까?", "Microsoft Excel이 작동을 멈췄습니다"또는 "Microsoft Excel에서 정보를 복구하려고합니다."와 같은 모든 Windows 오류 팝업 상자를 자동으로 닫거나 취소합니다.
2) 아직 열려있는 경우 Excel을 강제 종료하고 (예 : 중단 된 경우), 모든 excel.exe 프로세스를 종료합니다.
3) Excel 다시 시작
그런 앱을 dotnet에서 작성할 수 있습니까? 추가 정보를 찾으려면 어떤 참조 / 태그를 찾아야합니까?
고마워, 유그
파헤친 후 다음 해결책을 모았습니다. 아래의 vbs 코드는 모든 미해결 excel.exe 프로세스를 taskkill 한 다음 명시된 Excel 파일을 엽니 다 (워크 시트 _open 이벤트에서 vba 코드를 자동으로 다시 시작할 수 있음).
1) Windows 오류보고 끄기 : 시작, '문제 보고서 및 솔루션'검색, 설정 변경, 고급 설정, 문제보고 끄기
2) Excel에 대한 자동 복구 비활성화 : 해당 WB 내에서 클릭; 파일, 옵션, 저장,이 WB에 대해서만 파일 복구 비활성화
3) Windows 이벤트 뷰어, 응용 프로그램 로그에서 오류 (faulting excel app)를 강조 표시하고 '기본 작업 만들기'를 마우스 오른쪽 단추로 클릭 한 다음 응용 프로그램 / 스크립트를 실행하고 4에서 선택한 파일 이름을 입력합니다.
4) 다음 코드를 텍스트 파일에 붙여넣고 vbScript 파일 (.vbs)로 저장합니다.
Option Explicit
KillProcesses
ExcelRestart
Sub ExcelRestart()
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("C:\...\test.xlsx")
xlApp.visible = True
xlBook.activate
Set xlBook = Nothing
Set xlApp = Nothing
End sub
Sub KillProcesses
On error resume next
Dim objWMIService, WshShell
Dim proc, procList
Dim strComputer, strCommand
strCommand = "taskkill /F /IM excel.exe"
strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:"& "{impersonationLevel=impersonate}!\\"& strComputer & "\root\cimv2")
Set procList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'excel.exe'")
For Each proc In procList
WshShell.run strCommand, 0, TRUE
Next
End sub
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다