Exceller Home > VBA 강좌 > VBA 입문강좌

Exceller's VBA 입문강좌

- 최초 작성일 : 2008-07-31
- 최종 수정일 : 2008-07-31
- 강좌 읽음수 : 25,595회
- 자료 작성자 :


- 강좌 제목 : 다양한 버튼(Button) 컨트롤

들어가기 전에...

날도 더운데 유머 하나 보면서 시작하도록 하죠. 서울대 심리학과 최인철 교수의 <나를 바꾸는 심리학의 지혜 프레임> 중에 나오는 얘기입니다.

어느 날 세실과 모리스가 예배를 드리러 가는 중이었다. "모리스, 자네는 기도 중에 담배를 피워도 된다고 생각하나?" "글쎄 잘 모르겠는데... 랍비께 한번 여쭤보는 게 어떻겠나?" 세실이 랍비에게 가서 물었다.

"선생님, 기도 중에 담배를 피워도 되나요?" "(정색을 하며 대답하기를) 형제여, 그건 절대 안되네. 기도는 신과 나누는 엄숙한 대화인데 그럴 순 없지." 세실로부터 랍비의 답을 들은 모리스가 말했다. "그건 자네가 질문을 잘못했기 때문이야. 내가 가서 다시 여쭤보겠네" 이번에는 모리스가 랍비에게 가서 물었다.

"선생님, 담배를 피우는 중에는 기도를 하면 안되나요?" "(얼굴에 온화한 미소를 지으며)형제여, 기도는 때와 장소가 필요없다네. 담배를 피는 중에도 기도는 얼마든지 할 수 있는 것이지."

조삼모사 같은 행동으로 순진한(?) 랍비를 기만했다고 여기는 분도 있겠습니다만, 같은 행동이라 할 지라도 어떻게 '프레임' 하느냐에 따라 우리 삶의 결과물이 달라질 수 있음을 보여주는 사례라 하겠습니다. 여기서 '프레임'이란, 세상을 바라보는 마음의 창 또는 문제를 바라보는 관점을 의미합니다.

여러부~운, 휴가를 즐기는 중에는 (엑셀) 공부는 해야겠죠?...아니지... (엑셀) 공부를 하는 와중에도 휴가는 즐겨야겠죠? ^^


예제 파일 내려받기


엑셀의 리본을 가만히 들여다 보면 여러 종류의 컨트롤(control)이 사용되었음을 알 수 있습니다. 예를 들어 '홈' 탭을 보면, '글꼴'이나 '글꼴 크기'는 콤보 박스 컨트롤을 사용한 것이고, '붙여넣기'는 위와 아래가 나뉜 '분할 버튼(splitButton)'을 사용한 것입니다. 그런가 하면 '서식'을 클릭해 보면 또 다른 메뉴 구조가 아래로 펼쳐집니다.

수 많은 컨트롤 중에서 가장 일반적으로 많이 사용되는 컨트롤은 두말 할 것도 없이 '버튼(Button)'입니다. 버튼은 엑셀 2007 이전에도 메뉴나 도구 모음은 물론, 유저폼(UserForm) 등에서도 폭넓게 사용되었습니다. 엑셀 2007의 리본에서는 다양한 형태의 버튼을 추가할 수 있습니다.

빈 집 만들기

1. 'Office 단추-새로 만들기'를 클릭하여 새로운 파일을 하나 만듭니다.

2. 'Office 단추-다른 이름으로 저장-Excel 매크로 사용 통합 문서'를 선택한 다음 적당한 이름으로 저장하고 파일을 닫습니다.

3. 'Office 2007 Custom UI Editor'를 실행하여 앞에서 작성한 매크로 사용 통합 문서를 불러옵니다. 문패를 달려면 집이 있어야 하듯, 버튼을 추가하려면 '탭'이 있어야 합니다. 탭을 추가하는 것은 다음과 같은 XML을 사용하면 됩니다.

<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
    <tabs>
      <tab id="MyTab"
        label="Exceller's Tab"
        insertBeforeMso="TabHome">
      </tab>
    </tabs>
</ribbon>
</customUI>

 

직 이 도구를 내려받지 않은 분은 아래 사이트에서 'Office 2007 Custom UI Editor’라는 도구를 내려받아 설치하세요.

http://openxmldeveloper.org/archive/2006/05/26/CustomUIeditor.aspx

Custom UI Editor에 이 코드를 작성하고 'Save' 아이콘을 눌러 저장합니다. 엑셀에서 이 파일을 다시 불러오면 그림과 같이 문패를 달 집이 마련되어 있음을 알 수 있습니다.

요기까지는 이전에 알려드린 강좌에 대한 복습이었습니다. 이번 시간에는 여러 가지 종류의 버튼 컨트롤로 이루어진 탭을 만들어볼까 합니다. 위의 썰렁하던 탭이 이렇게 바뀝니다. 짠~~

<완성 예>

세 개의 그룹이 추가되었습니다. 'Built-in' 그룹은 엑셀에서 자체적으로 제공하는 버튼들을 모아놓은 것이고, 'Menu' 그룹은 버튼을 클릭하면 아래에 하위 메뉴가 펼쳐지는 버튼입니다. 마지막으로 'Split' 그룹은 '피벗 테이블' 컨트롤과 비슷한 형태의 버튼이 되겠습니다.

리본X 코드 작성하기

1. 앞에서 작성한 빈 '매크로 사용 통합 문서'를 UI Editor에서 불러온 다음 XML로 리본X 코드를 작성합니다.

전체 XML 코드의 내용은 아래와 같습니다. 코드가 길다고 절대 기가 죽을 필요는 없고... 그냥 복사해서 붙여 넣으세요. 이 코드를 보고도 아직 정신을 놓지(?) 않으셨다면... 무엇과 무엇이 대칭을 이루고 있는지 연필로(혹은 눈으로) 확인해 보세요. 현재 단계에서는 그 정도만으로 충분합니다.

<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
  <tabs>
    <tab id="MyTab"
      label="Exceller's Tab"
        insertBeforeMso="TabHome">
        <group id="grpBuint-in"
          label="Built-in">
          <box id="boxFontStyle"
            boxStyle="horizontal"
            visible="true">
            <toggleButton idMso="Bold"/>
            <toggleButton idMso="Italic"/>
            <toggleButton idMso="Underline"/>
            <toggleButton idMso="UnderlineDouble"/>
        </box>
        <box id="boxFormatStyle"
          boxStyle="horizontal"
          visible="true">
          <button idMso="PercentStyle"/>
          <button idMso="CommaStyle"/>
          <button idMso="DecimalsIncrease"/>
          <button idMso="DecimalsDecrease"/>
        </box>
      </group>
      <group id="grpFileSaveAs"
        label="Menu">
        <menu id="ChangeFormats"
          label="Save As"
          size="large"
          imageMso="FileSaveAsOtherFormats">
          <menuSeparator id="Separator01"
            title="Save as 2007 formats"/>
          <button idMso="FileSaveAsExcelXlsx"/>
          <button idMso="FileSaveAsExcelXlsxMacro"/>
          <button idMso="FileSaveAsExcelXlsb"/>
          <menuSeparator id="Separator02"
            title="Save as 97-2003 formats"/>
          <button idMso="FileSaveAsExcel97_2003"/>
          <menuSeparator id="Separator03"
            title="Save as other formats"/>
          <button idMso="FileSaveAsOtherFormats"/>
        </menu>
      </group>
      <group id="grpSplitButton"
        label="Split">
        <splitButton id="InsertSheet"
          size="large">
        <button id="btnInsertSheet"
          label="Insert Sheets"
          imageMso="PropertySheet"/>
        <menu id="mnuInsertSheet">
          <button id="Worksheet"
            label="Insert Worksheet"
           imageMso="SheetInsert"
            onAction="InsertSheet_click"/>
          <button id="Chartsheet"
            label="Insert Chart Sheet"
            imageMso="PivotChartType"
            onAction="InsertSheet_click"/>
        </menu>
      </splitButton>
    </group>
  </tab>
</tabs>
</ribbon>
</customUI>

2. 코드 입력이 끝났으면 'Validate' 아이콘을 클릭합니다. 제대로 입력이 되었다면 'Custom UI XML is well formed!'라는 대화상자가 나타납니다.


 

콜백(CallBack) 프로시저 만들기

1. 'Generate Callbacks' 아이콘을 클릭하면 리본X 코드의 onAction 속성에 의해 호출되는 외부 프로시저들이 생성됩니다(물론 빈껍데기 뿐이긴 하지만...).

2. 범위를 지정한 다음 마우스 오른쪽 버튼을 클릭하고 'Copy' 메뉴를 선택합니다(혹은 <Ctrl+C> 키를 눌러도 됩니다).

3. 'Save' 버튼을 클릭하여 현재 파일을 저장합니다. 이제 엑셀로 되돌아와서 해당 파일을 엽니다. '개발 도구' 탭의 'Visual Basic' 컨트롤을 클릭하여 모듈 시트를 삽입하고, 앞에서 복사한 콜백 프로시저를 붙여 넣습니다.

4. InsertSheet_click 프로시저를 작성합니다. 이것은 엑셀의 영역이고 코드 또한 길지 않으므로 직접 입력해 보세요. 우리에게 아주 친숙한 Select~Case 구문일 따름입니다.

이제 파일을 저장했다가 다시 열어보시면 앞의 <완성 예>에서 보신 각종 버튼 컨트롤들이 나타납니다.

리본X의 세부적인 코딩 내용에 대해서는 너무 부담갖지 마시고, 작성 순서와 전체적인 흐름과 진행순서만 잘 이해하시면 되겠습니다.

본격적인 휴가철이 시작되었습니다. '동시패션 문화'의 영향으로, 이맘 때는 어디를 가든 힘들기 마련입니다. '어디서'가 아닌 '누구와'에 초점을 맞추면 조금은 더 여유로워지지 않을까 생각해 봅니다.

모두들 행복한 휴가 보내시기 바래요~~


Previous

Next

Creative Commons License