programing

공용 VBA 메서드가 Excel 매크로 목록에 표시되지 않도록 하기

goodsources 2023. 5. 21. 11:22
반응형

공용 VBA 메서드가 Excel 매크로 목록에 표시되지 않도록 하기

Excel VBA(2003)에서는 모듈 또는 이 워크북에서 인수가 없는 공용 또는 친구 하위 메서드가 사용자가 실행할 수 있는 매크로로 표시된다는 것을 알게 되었습니다.즉, 사용자가 도구 --> 매크로 --> 매크로로 이동할 때...(또는 Alt+F8) 메소드가 실행 가능한 목록에 나타납니다.

제정신을 위해 (조직, 유지보수 등) 코드를 모듈로 분리해야 합니다.나는 사용자에게 일부 메서드를 숨기지만 다른 코드 모듈에서 볼 수 있도록 허용하는 비해키적인 방법을 찾고 있습니다.모든 코드는 동일한 응용 프로그램 내에 포함되므로 외부 코드가 호출되지 않습니다.

현재 해결 방법은 Subs 대신 Boolean을 반환하는 함수를 사용하고 반환 값을 무시하는 것입니다.eJames는 매크로 목록에서 메서드를 숨길 수 있는 Sub에서 선택적 인수를 사용하는 옵션을 제안했습니다.

그러나 이 두 가지 모두 제대로 느껴지지 않으므로 사소한 Excel VBA 응용프로그램을 구성하는 방법에 대한 조언은 매우 감사합니다.

모듈 상단에 다음을 추가합니다.

Option Private Module

MSDN에서:

모듈에 Option Private Module이 포함되어 있는 경우 모듈 수준에서 선언된 변수, 개체 및 사용자 정의 유형과 같은 공용 부분은 모듈이 포함된 프로젝트 내에서 계속 사용할 수 있지만 다른 응용 프로그램이나 프로젝트에서는 사용할 수 없습니다.

한 가지 해결책은 방법에 다음과 같은 것을 주는 것입니다.Optional논쟁.

Public Sub myPublicSub(Optional dummy_var As Integer)
    ...
End Sub

Jason Z의 답변에 대한 작은 부록: 숨겨진 방법Option Private Module를 사용하는 경우에도 여전히 표시됩니다.Application.Run()메서드를 호출합니다.

또한 옵션 개인 모듈과 옵션 매개 변수 추가의 부작용은 Sub가 더 이상 바로 가기 키 바인딩의 대상으로 작동하지 않는다는 것입니다.

재작성됨:매크로를 실행하기 위한 키보드 단축키를 설정하기 위한 키 바인딩이 있는 경우.해당 매크로는 숨길 수 없습니다.그렇지 않으면 키 바인딩이 작동하지 않습니다.

제 방법은 이미 나열되었지만 ChrisB는 다음과 같은 진술을 했습니다.

일반적으로 코드 모듈 상단에는 옵션 개인 모듈이 있어야 합니다. 단, 모듈에 버튼으로 호출되는 절차가 포함되어 있는 경우는 예외입니다.

매크로를 비공개로 설정하기 전에 매크로가 버튼에 할당된 경우, 개인 루틴도 버튼에서 호출할 수 있습니다.

언급URL : https://stackoverflow.com/questions/296696/making-sure-public-vba-methods-dont-show-up-in-the-list-of-excel-macros

반응형