>source

해결 방법을 알아낼 수없는 문제를 발견 한 것 같습니다. 현재 2 개의 별도 통합 문서로 작업하고 있습니다. 그 중 하나는 코드가 실행되는 활성 통합 문서이고 다른 하나는 열어야하는 별도의 통합 문서입니다.

On Error GoTo ErrorHandler:
Set manWb = ActiveWorkbook
Application.AutomationSecurity = msoAutomationSecurityForceDisable
Set conWb = Workbooks.Open(PARDirOTC & PARFileOTC, ReadOnly:=False)
Application.AutomationSecurity = msoAutomationSecurityByUI
ActiveWindow.Visible = False
On Error GoTo 0

두 번째 통합 문서가이 상황에서 필요하지 않은 코드가있는 Workbook_Open 이벤트를 실행하지 못하도록 AutomationSecurity를 ​​msoAutomationSecurityForceDisable로 설정했습니다. 해당 오류 처리 이벤트는 활성화되지 않는 것 같으며 코드는 계속 문제없이 진행됩니다.

이 시점부터 모든 것이 잘 작동하므로이 두 통합 문서간에 데이터를 수집하고 교환해도 아무런 문제가없는 것 같습니다. 즉, 두 번째 통합 문서에 워크 시트를 만들어야 할 때까지 "conWb"라는 워크 시트를 만들어야합니다.

Set conOT = conWb.Sheets.Add(After:=conWb.Sheets(conWb.Sheets.Count))

이것은 골치 아픈 선입니다. 워크 시트가 만들어 지지만이 시점에서 코드 실행이 갑자기 중지됩니다. 오류 메시지가 전혀 나타나지 않고 아무 것도 나타나지 않고 단순히 중지됩니다. 코드가 실행을 멈추고 새로 작성된 시트의 코드로 바뀌는 것으로 나타났습니다.이 코드는 비어 있고 아무것도 없습니다. 이유를 이해할 수 없습니다.

내가 둘러 보았지만 다른 사람들이 비슷한 문제를 발견 한 것처럼 보이지만 그들의 해결책 중 어느 것도 나를 위해 효과가 없었습니다. EnableEvents, ScreenUpdating, AutomationSecurity 등과 같은 여러 응용 프로그램 설정으로 놀아 보았지만 아무것도 작동하지 않습니다. 코드와 함께, 나는이 동작을 설명 할 수있는 오류를 숨길 수 있다고 두려워하면서 모든 "오류 발생"이벤트를 제거하거나 주석 처리하려고 시도했지만, 그렇지 않은 것 같습니다.

나보다 더 많은 경험을 가진 사람이이 행동의 이유가 무엇인지 알아낼 수 있다면 대단히 감사하겠습니다. 미리 감사드립니다.

친절한 관계


  • 답변 # 1

    제안한 것과 같이 두 번째 통합 문서를 열 때 Application.AutomationSecurity 대신 Application.EnableEvents를 사용하면 전체 문제가 해결되었습니다. 이렇게 :

    On Error GoTo ErrorHandler:
    Set manWb = ActiveWorkbook
    Application.EnableEvents = False
    Set conWb = Workbooks.Open(PARDirOTC & PARFileOTC, ReadOnly:=False) 
    Application.EnableEvents = True
    ActiveWindow.Visible = False
    On Error GoTo 0
    
    
    내가 아는 한, AutomationSecurity는 프로그래밍 방식으로 통합 문서를 열 때 모든 매크로를 비활성화하는 데 사용할 수 있으며 Workbook_Open 이벤트를 방지하기에 충분하다고 생각했지만 다른 이벤트가 있다고 가정하고 있습니다. ' 인식하지 않거나 AutomationSecurity 설정은 처음에 생각한 것과 다른 방식으로 작동합니다.

    어쨌든 문제가 해결 된 것 같습니다. 감사합니다.

    친절한 관계

관련 자료

  • 이전 python - 데이터 프레임에서 꼬리 열을 확인하는 방법이 있습니까?
  • 다음 c++ - 유형의 벡터가 1 만 저장하는 이유는 무엇입니까?