이것은 실제로 코드에 특정한 질문이 아니지만 호기심을 만족시키기위한 것 (향후 문제는 피하십시오)이므로 SO가 적합하다고 생각했습니다.Application.ScreenUpdating in Subroutine within Subroutine
내 질문의 근거는 다음과 같습니다. VBA는 Application.ScreenUpdating
과 서브 루틴 내에서 호출되는 서브 루틴과 같은 다른 호출을 어떻게 처리합니까?
예를 들어 설명하기 위해 나는 매우 빠르게 액티브 시트의 데이터를 가져 와서 같은 이름의 "숨겨진 시트"에 복사하는 방법을 사용했습니다 (이 기능을 사용하여 사용자에게 제공합니다). 서브 루틴의 동작을 취소하기 위해 일반적인 방법을 사용할 수 없으므로 "실행 취소"매크로). BackupData
에서 ScreenUpdating
을 False 및 True로 전환하면 최종 사용자가 작업을 완전히 숨길 수 있습니다. 질문의 문제는 사용자에게 매크로 실행에 대한 무료 액세스 권한을 부여하지만 ScreenUpdating
속성을 토글하는 다른 매크로에서도 호출하도록 선택했기 때문에 발생합니다.
그래서, BackupData
경우에 따라서 나머지를 떠나 BackupData
호출이 True 재정에 "외부"루틴의 호출을 속성을 설정하는 것, 매크로 False로 ScreenUpdating
속성을 전환했다고 후 매크로 내에서 호출 해당 매크로를 화면 업데이트로 실행하려면?
지금 당연히이 문제에 대한 많은 쉬운 해결책이 있다는 것을 알고 있습니다. 만약 ScreenUpdating
이 이미 거짓인지를 확인한 다음 그 값이 참이라면에 부울 값을 저장할 수 있습니다. 또는 BackupData
을 실행 한 후에 ScreenUpdating = False
호출을 반복하거나 심지어 동일한 서브를 BackupData
에 쓸 수도 있습니다. 이 매크로에서 실행되는 값을 토글하지는 않지만이 문제의 요점은 그 해결책을 찾는 것이 아닙니다.
내 생각에 이것은 VBA가 중첩 된 서브 루틴 호출과 함께 작동하는 방법에 대한 질문이지만 VBA가이 문제를 저에게 처리 할 것인지 또는 궁금한 점이 있을지에 대한 확실한 답을 얻을 수 있습니다. afforred 해결 방법 중 하나를 사용해야하는 경우.
TL, 나는 이미 일한 많은 옵션이 있기 때문에 DR
나는, 해결 솔루션을 찾고 있지 않다. 나는 누군가가 VBA가 이러한 종류의 호출 (정확히 ScreenUpdating
속성뿐만 아니라 다른 응용 프로그램 속성에도 해당되지 않음)을 정확히 처리하는지 궁금해합니다.
가장 일반적인 추측은 전체 응용 프로그램을 참조하는 '응용 프로그램'이라는 단어입니까? 그래서 모든 통합 문서, 모든 하위 또는 부모 루틴에 적용되는 응용 프로그램 수준의 메서드를 호출하기 때문에 범위를 지정하는 것이 중요하지 않습니다. –