배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   유저폼,userform,컨트롤,control
제목:   유저폼 목에 또 메뉴달기
     
 

새 페이지 1

  STEP> 따라하기

※ 아래 Daily Tip은 곽승주님이 제공해주신 내용입니다.

일전에 필자는 어려운 API를 써가면서 Userform에 메뉴를 만들어 사용하는 데일리팁(유저폼 목에 메뉴달기)을 보여준 적이 있습니다. 사실 API를 사용한다는 것이 초보자로선 그리 쉬운 일은 아닙니다. 이번에는 API를 사용하지 않고 Userform에 메뉴를 만드는 방법을 소개할까 합니다.

필자가 언제 어디서 구했는지는 기억나지는 않지만 MenuControl.ocx라는 컨트롤을 소개할까 합니다. 이름에서 알 수 있듯이 VBA의 Userfrom에 메뉴를 사용할 수 있도록 해주는 컨트롤입니다. Userform의 컨트롤처럼 사용하면 됩니다. (컨트롤과 예제파일은 자료실에 있습니다)

MenuControl.zip파일에는 menucode.txt, MenuControl.lib, MenuControl.ocx 등 3개의 파일이 있습니다. menucode.txt는 간단한 예제코드가 담겨져 있습니다. 그리고 나머지는 컨트롤 관련 파일입니다.

이제 압축을 풀어 MenuControl을 레지스트리에 등록해야 합니다. MenuControl은 윈도우나 오피스의 기본 컨트롤도 아니며 설치를 통해 복사된 것이 아니므로 여러분을 이를 직접 레지스트리에 등록해야 합니다.

<1> 도스 프롬프트를 실행하고 압축 풀린 파일이 있는 폴더로 이동합니다.

<2> 압축을 푼 폴더에서 dir 명령으로 menucode.txt, MenuControl.lib, MenuControl.ocx이 있는지 확인하셨나요?

<3> 이제 파일을 확인했다면 도스프롬프트에서 Regsvr32.exe MenuControl.ocx 을 입력하고 Enter키를 누릅니다.

<4> 큰 문제가 없다면 DLL이 성공적으로 등록되었다는 대화상자를 보여줄 것입니다.

이제 기본적인 사용환경이 마련되었습니다. 엑셀에서 이를 이용하여 프로그램을 만들어 볼 차례입니다.

<1> 새로운 Userform 을 추가하고 컨트롤도구상자에서 마우스 오른쪽 버튼을 클릭하고 단축메뉴에서 추가 컨트롤을 클릭합니다.

<2> 추가 컨트롤 대화상자에서 MenuControl.VBAMENU를 찾아 선택하고 확인을 클릭합니다.

<3> 컨트롤을 추가하면 도구상자의 끝에는 새로 추가된 컨트롤 아이콘을 보일 것입니다.

<4> 추가된 컨트롤을 선택하여 Userform에 추가합니다.

<5> 그리고 다음과 같이 Userform에 코드를 추가합니다. 아래의 코드는 압축파일 중 Menucode.txt파일의 내용입니다.


Userform의 Initialize이벤트에서 VBAMENU1컨트롤의 속성을 지정합니다.
Private Sub UserForm_Initialize()
    With VBAMENU1
        .Caption = "File"
        .AddMenu "Open", "mnuOpen"
        .AddMenu "New", "mnuNew"
        .AddMenu "Insert", "mnuIns"
        .AddMenu "Close", "mnuClose"
    End With
End Sub
메뉴를 클릭했을 때 이벤트 프로시져입니다.
Private Sub vbaMenu1_MenuClick(MenuItem As MenuControl.clsMenu)
    MsgBox MenuItem.Caption & " Clicked"
End Sub
 

이제 Userform을 실행하여 코드를 테스트해볼 차례입니다.

<1> Userform을 실행하면 File이라는 메뉴가 보일 것입니다.

<2> File메뉴를 클릭하면 아래로 Open, New, Insert, Close 등등 4개의 하위 메뉴 항목이 보일 것입니다.

<3> 메뉴 항목 중 하나를 클릭하면 vbaMenu1_MenuClick()이벤트 프로시져가 실행되고 MsgBox에 클릭한 메뉴의 이름을 보여줄 것입니다.

필자는 이 컨트롤을 많이 사용하진 않았지만 MenuControl 컨트롤이 많은 기능(예를 들어 FaceID, Accelator Key, 2차 하위메뉴 등등)을 제공하는것 같지는 않습니다.

또한 많은 테스트를 해보질 않아서 필자로서는 안정성을 보장하진 않습니다. 실무에 사용하시기 전에 미리 테스트를 해보시길 바랍니다.

그리고 이것을 이용하여 만든 엑셀프로그램을 다른 PC에서 복사하여 사용하려면 MenuControl.ocx를 레지스트리에 미리 등록하셔야 합니다.

 

[참고]

오피스2003에서는 다음과 같은 보안관련 대화상자가 나타날 수 있습니다. 확인버튼을 클릭하면 사용이 가능하게 됩니다.