드로우홀릭 더베이직

0. 개요

길벗에서 나온 액세스 2010 무작정 따라하기와 액세스 2013 무작정 따라하기에 보면, 리본 메뉴 사용자 정의 기능을 이용하여 리본 메뉴를 만들 수 있습니다. 그러나 이러한 기능은 몇 가지 문제가 있습니다.

  • 만든 리본 메뉴는 내 PC에서만 표시됩니다.
  • 액세스로 다른 앱을 만들었을 경우, 다른 앱에도 동일한 메뉴가 표시됩니다.

이런 문제를 해결하려고, 아마 이 글을 보고 있을 것이라고 생각합니다.

원래는, 이러한 리본 메뉴를 만드는 툴을 만들어서 무료 배포하려고 했었는데, 자꾸 시간만 흘러가서, 일단 다소 어려울지 모르지만, 방법을 소개해 보려고 합니다.

이 내용을 보고도 다소 어려운 분은, 튜터링을 요청해 주십시오. 1시간 정도면 해결할 수 있을 것입니다.

1. 리본 메뉴 만들기

1) 리본 메뉴를 만드는 것은, 매우 어려운 작업입니다. 리본 메뉴에 맞는 xml 문서를 직접 편집해야 하기 때문입니다.

2) 프로그래밍 스킬이 있는 분들은 다음 문서를 참고하기 바랍니다. (모두 영문입니다.)

3) 걱정 마세요. 이 문서는, 프로그래밍 스킬이 없는 분들을 위해 만들었습니다.

  • 이런 분들은 TFaccess를 이용해서 리본 메뉴를 만듭니다. 다음 링크를 참고하세요.
    (뒷부분에 보면 '메뉴 만들기'를 참고하면 됩니다.)
    TFaccess 동영상 강좌
  • 2016-01-29 현재, TFaccess를 윈도우 8 이상의 최신 운영체제에서 설치할 때 오류가 발생할 수 있습니다.
    이런 분은 070-8290-2724로 전화 주셔서 '염기웅'을 찾으세요.
    TFaccess 설치에 한해서 무상으로 지원해 드리겠습니다.

4) 리본 메뉴를 만들 때, '동작'은 'VB코드 실행' 으로 지정합니다. 그리고 '동작 내용'에는 '=함수이름()' 으로 입력합니다.

  • '함수이름' 대신, 고유한 여러분이 명명한 함수 이름을 기입하세요.
    나중에, 여러분 앱에서 함수를 만들면, 그 함수가 동작하게 될 것입니다.
  • 예를 들어, '주문서'를 여는 기능을 만든다면 '=주문서열기()' 가 적합하겠습니다.
    혹은 '=OpenOrders()' 로 하면 좀 더 프로그래머 다워 보이긴 하겠네요. ^^;

5) 리본 메뉴를 다 만들었으면 'Test' 버튼을 클릭합니다. 그러면 여러분 PC 어딘가에 리본메뉴 xml 파일이 저장됩니다.

  •  여러분이 만든 TFaccess 앱 이름이 'ABC' 라면, 다음 경로에 리본 메뉴 파일이 있습니다.
    %Temp%\TEMP_ABC\menu_test.xml

2. 리본 메뉴 편집하기

1) 적절한 텍스트 편집기 프로그램을 실행하고, 앞에서 설명한 리본 메뉴 파일을 여세요.

  • 저는 Notepad++ 이라는 프로그램을 애용합니다.

2) 파일 맨 앞부분에 보면 '<contextualTabs>' 라는 줄이 있습니다. 이 줄을 삭제하세요.

3) 파일 맨 끝부분에 보면 '</contextualTabs>' 라는 줄이 있습니다. 이 줄 역시 삭제하세요.

4) 파일 맨 앞부분에 보면 '<tabSet idMso="TabSetFormReportExtensibility">' 이라는 줄이 있습니다. 이 줄은 '<tabs>' 로 대체합니다. '<tabSet idMso="TabSetFormReportExtensibility">'을 지우고 '<tabs>' 을 입력하면 됩니다.

5) 파일 맨 끝부분에 보면 '</tabSet>' 라는 줄이 있습니다. 이 줄은 '</tabs>'로 대체합니다.

6) 리본 메뉴 파일 편집이 끝났습니다. 축하합니다!

3. 자신의 액세스 앱에 리본 메뉴 적용하기

1) 여러분의 액세스 앱을 여세요.

2) 'USysRibbons' 라는 테이블을 만드세요. 필드 구성은 다음과 같습니다.

  • RibbonName: 텍스트 255
  • RibbonXML: 메모

참고: 기본키는 있어도 되고 없어도 됩니다. 다른 필드가 있어도 괜찮습니다. 다만, RibbonName, RibbonXML 두 필드는 꼭 있어야 합니다.
여러 레코드를 등록해도 됩니다. 그러면 메뉴가 여러 개가 되죠. 그러나, 'RibbonName'이 중복되게 하진 마세요.

3) 이제 테이블을 저장하고, 데이터시트 보기로 전환합니다.

4) 'RibbonName' 에는 적당한 이름을 입력합니다. 예를 들면 'MyMenu' 라고 입력해도 됩니다.

5) 'RibbonXML'에는 아까 편집했던 리본 메뉴의 xml 구문을 입력합니다. ('<customUI' 로 시작해서 '</customUI>' 로 끝납니다.)

6) 이제 액세스를 종료하고 다시 실행합니다.

7) 액세스 옵션 화면으로 갑니다. (액세스 버전따라 조금씩 다르긴 하지만, 보통 '파일' 탭을 클릭하면 '옵션' 이라는 항목이 있습니다.)

8) 'Access 옵션' 창이 표시될 겁니다. 여기에서 '현재 데이터베이스' 탭을 클릭합니다.

9) 아래로 스크롤하다 보면 '리본 메뉴 이름' 이라는 콤보상자가 있을 겁니다. 여기에서 아까 'RibbonName' 필드에 입력했던 이름을 선택합니다. 예를 들면, 'MyMenu'를 선택합니다.

참고: 이 콤보상자에서 무엇인가를 선택할 수 없다면 5번 항목으로 되돌아 가서 무엇이 문제인지 살펴보세요.

10) 이제 거의 끝났습니다. 액세스를 종료하고 다시 실행합니다. 그러면 리본 메뉴가 표시될 겁니다.

4. 리본 메뉴에 명령 부여하기

1) 이제 리본 메뉴의 버튼을 한 번 클릭해 봅니다. 아마 '입력한 식에 Microsoft Access'에서 찾을 수 없는 함수가 있습니다' 라는 메시지를 만나게 될 겁니다.

2) 리본 메뉴를 만들었지만, 아직 메뉴를 클릭했을 때 실행할 명령을 만들지 않았기 때문이죠.

3) 앞서 '1.4' 에서 함수 이름 정의하라고 말했었지요? 그 함수 이름으로 VBA 함수를 만들면 됩니다.

4) 모듈을 하나 엽니다.

5) 다음과 비슷하게 함수를 만듭니다. (함수 이름은 'gfnMenu1' 입니다.)

Public Function gfnMenu1()

    MsgBox "버튼1"
    
End Function

여기에서 저는 'MsgBox' 함수를 이용해서 단순히 메시지만 출력했습니다.

보통은 폼을 열 텐데, 다음과 같은 명령을 내리면 됩니다.

Docmd.OpenForm "폼이름"

만약, 데이터시트 보기로 폼을 열기를 바라면 다음과 같은 명령을 내리면 됩니다.

Docmd.OpenForm "폼이름", acFormDS

5. 사용자들로부터 앱 보호하기

1) 이 부분은 우선, 다음 링크를 참고하세요.
/kb/541

2) 그런데, 위 링크대로 하더라도, '파일' 탭 - '옵션' 으로 들어와서 리본메뉴를 없애버리면, 사용자는 여러분이 만든 앱에 자유자재로 접근할 수 있게 됩니다. 일종의 '해킹' 과 유사하지요.

3) 이런 문제를 해결하려면, 리본 메뉴상에서 '옵션'을 빼야 합니다.

4) 리본 메뉴 xml 파일을 수정해 봅시다. USysRibbons 테이블에 저장되어 있는 리본 메뉴 XML 파일을 편집하면 됩니다.

5) 첫 줄은 '<customUI'로 시작하고 있습니다. 이것은 그냥 놔 둡니다.

6) 두번째 줄은 '<ribbon>' 으로 되어 있을 겁니다. 두번째 줄 앞에, 그러니까 '<ribbon>' 앞에 다음 구문을 입력합니다.

    <commands>
        <command idMso="ApplicationOptionsDialog" enabled = "false"/>
        <command idMso="FileExit" enabled = "false"/>
        <command idMso="Help" enabled = "false"/>
    </commands>

7) 눈치가 빠른 분들은 알 테지만, 'ApplicationOptionsDialog' 의 'enabled' 속성이 'false' 로 되어 있습니다. 그래서 '옵션' 대화상자를 표시할 수 없는 것입니다.

8) 그 다음은 '<ribbon>' 으로 되어 있는데, 이 부분을 '<ribbon startFromScratch="true">' 로 바꿉니다. 'startFromScratch' 속성이 'true'로 되어 있으면, 액세스의 기본적인 메뉴를 표시하지 않습니다. 여기까지 해야 안전합니다.

첨부한 파일은, 이러한 것을 모두 적용해 놓은 파일입니다.

참고로, 첨부한 파일에 적용된 리본 메뉴 xml은 다음과 같습니다.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 
    <commands>
        <command idMso="ApplicationOptionsDialog" enabled = "false"/>
        <command idMso="FileExit" enabled = "false"/>
        <command idMso="Help" enabled = "false"/>
    </commands>
 
    <ribbon startFromScratch="true">
        <tabs>
            <tab id="tab_10001" label="탭1">
                <group id="grp_10002" label="그룹1">
                    <button id="btn_10005" label="버튼1" size="large" imageMso="BusinessCardInsertMenu" onAction="=gfnMenu1()" />
                </group>
                <group id="grp_10003" label="그룹2">
                    <button id="btn_10006" label="버튼2" size="large" imageMso="AccessTableTasks" onAction="=gfnMenu2()" />
                    <button id="btn_10008" label="버튼3" size="large" imageMso="AccessTableIssues" onAction="=gfnMenu3()" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

참고하시고, 모두 멋진 앱 만드세요~

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 액세스-일반 길벗출판사 / 실무액세스 예제파일(64비트용) [4] 돌직구 2021-01-13 32580
공지 액세스-일반 길벗출판사 / 액세스 2013 무작정 따라하기 정오표 돌직구 2014-10-09 82364
공지 액세스-일반 길벗출판사 / 액세스 2010 무작정 따라하기 정오표 file 돌직구 2012-10-26 127536
29 IT일반 (중소기업) 랜섬웨어 예방하기 돌직구 2016-04-27 7115
28 IT일반 검색엔진에게 내 정보 조금만 주기 file 돌직구 2016-03-01 15243
» 액세스-일반 특정 데이터베이스에만 반영되는 메뉴 만들기 file 돌직구 2016-01-17 9616
26 액세스-일반 액세스에서 자주 사용하는 함수 file 돌직구 2015-07-13 39238
25 액세스-일반 '필수' 속성과 '빈 문자열 허용' 속성 알아보기 file 돌직구 2014-11-21 21041
24 ADP 대용량 해결하기 및 ADP 알아보기 file 돌직구 2014-09-14 34152
23 IT일반 우편번호 DB 2014-03-07, 도로명 주소 포함 돌직구 2014-03-12 29872
22 IT일반 Windows 8에서 드래그 & 드롭이 되지 않을 때 file 윈드님 2013-09-12 33849
21 IT일반 맥북을 업무용으로 구입하고 싶으세요? 돌직구 2013-09-04 24285
20 MS액세스 블로그 번역 액세스(Access) 2013으로 업무용 앱을 만드는 4가지 방법 file 윈드님 2013-07-13 48769
19 MS액세스 블로그 번역 쉬운 데이터 입력 file 윈드님 2013-06-18 30911
18 IT일반 Dropbox 동기화 vs. SkyDrive Pro 동기화 돌직구 2013-06-06 25089
17 SQL Server SQL Server Express 버전별 DB 용량 1 돌직구 2013-05-30 47083
16 ADP 액세스와 SQL Server 간의 데이터 형식 호환표 돌직구 2013-05-14 18682
15 MS액세스 블로그 번역 액세스(Access) 2013 과 SQL 서버(SQL Server) file 윈드님 2013-05-13 37042
14 MS액세스 블로그 번역 액세스(Access) 테이블, 자동으로 재연결하기 file 1 윈드님 2013-05-02 22806
13 MS액세스 블로그 번역 액세스(Access) 2013 웹 앱 만들기 file 윈드님 2013-04-18 41230
12 MS액세스 블로그 번역 액세스(Access) 2013 소개 file 윈드님 2013-04-15 21007
11 액세스-일반 한/영 자동 전환 (IME 모드 속성) file 돌직구 2013-04-12 44176
10 액세스-일반 탐색 컨트롤 돌직구 2012-07-17 19714


  주소  12925 경기도 하남시 미사대로 540, B동 917호 (현대지식산업센터 한강미사2차) ㈜팀데이터이십일  |  고객센터 전화번호  02-467-2998  |  대표이사  염기웅
개인정보관리책임자  염기웅 (ml_privacy@td21.com)  |  사업자등록번호  120-86-79260  |  통신판매업신고번호  제 2021-경기하남-1166 호  [사업자 정보 확인]
  TD21의 사전 서면 동의 없이 TD21 사이트 일체의 정보, 콘텐츠 및 UI 등을 상업적 목적으로 전시, 전송, 스크래핑 등 무단 사용할 수 없습니다.