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

Exceller's VBA 입문강좌

- 최초 작성일 : 2008-08-25
- 최종 수정일 : 2008-08-25
- 강좌 읽음수 : 23,626회
- 자료 작성자 :


- 강좌 제목 : 세상에 둘도 없는 "엑셀 포토 갤러리" 만들기

들어가기 전에 : 하늘 아래 새로운 것은 없다

뛰어난 혁신을 이루었거나 위대한 발명을 한 사람에게, '어떻게 그런 생각을 하게 되었느냐?'고 물어보면 '우연히 그런 생각이 떠올랐다'는 얘기를 하곤 한다.

'작화증(confabulation)'이라는 것이 있다. 없었던 일을 마치 있었던 것처럼 확신을 가지고 말하거나, 일어났던 일을 위장하거나 왜곡하는 것을 말한다. 키스 소여의 <그룹 지니어스>를 보면, 한 사람의 천재가 위대한 발명품을 만들어냈다는 것이 얼마나 사실과 다른 것인지에 대해 알려준다.

한 사람의 천재가 위대한 발명품을 만들어냈다는 이야기는 신화에 불과하다. 위대한 발명품은 역사를 빛낸 위대한 발명가가 아닌 여러 사람들이 모여 이루어내는 그룹 지니어스를 통해 만들어졌다.

모든 위대한 발명품들은 작은 아이디어들이 끊임없이 연결되는 과정에서 탄생된다. 처음 나온 아이디어는 대부분 작고 평범하지만 이러한 아이디어를 하나로 모으는 가운데 새로운 아이디어가 탄생하거나 기존의 아이디어가 새롭게 재해석되는 것이다. 전신? 새뮤얼 모스가 발명하지 않았다. 전구? 토마스 에디슨이 발명하지 않았다. 비행기? 라이트 형제가 발명하지 않았다.

사람들은 마치 그 아이디어를 자신이 직접 생각해 낸 것으로 생각하지만 실제로는 사회적인 관계를 통해 얻은 것이다. 통찰력을 이끌어내는 사회적/협력적 자극을 의식적으로 인지하지 못하기 때문에, 문제를 해결하는 통찰력이 어느 순간 갑자기 떠오른다는 터무니없는 믿음은 앞으로도 오랫동안 살아남을 것이다.

<그룹 지니어스>, 키스 소여

이런 예는 비단 과학적 발명에만 국한되지 않는다. 예술작품에서도 수많은 관련 사례들을 찾아볼 수 있다. 에두아르 마네의 <올랭피아>는 티치아노의 <우르비노의 비너스>, 고야의 <옷을 벗은 마하>로부터 영향을 받은 것으로 추정된다. 올랭피아를 그리기 위한 스케치를 보면 그녀의 자세가 앵그르의 <그랑드 오달리스크>로부터도 영향을 받았음을 유추할 수 있다. 마네 또한 티치아노에 대해 "거부할 수 없을 만큼 순수한 선을 보여주는 작가"라며 존경을 표한 바 있다.


1863 | 캔버스에 유화 | 130.5 X 190cm | 파리, 오르세 미술관

에드바르드 뭉크의 <절규>또한 마찬가지이다. '자연을 관통하는 그치지 않는 비명소리'를 들었던 기억을 바탕으로 그렸다는 이 작품은 불안과 두려움, 소외를 표현하고 있는 현대의 아이콘이라고 할 수 있다. 해골처럼 보이는 인물의 얼굴과 양손의 위치는 잉카 문명의 유적지에서 발견된 미이라에서 영감을 받은 것으로 보인다(당시 그 미이라는 파리의 트로카데로궁에 전시되고 있었다). 해골같은 인물의 오른쪽 배경에 있는 급격하게 기울어진 사선은 구스타브 캘리보트의 <발코니의 남자>에서 개념을 채용하였다.


1898 | 마분지에 유화 | 91 X 73.5cm | 오슬로, 내셔널 갤러리

'거장'이라는 수식어가 늘 이름 앞에 따라다니는 파블로 피카소 또한 이러한 사실로부터 자유롭지 않다. 큐비즘의 특징을 보여주는 작품의 하나인 <아비뇽의 처녀들>을 보면, 오른쪽 아래에 쪼그리고 앉아 있는 인물은 폴 세잔의 <목욕하는 여인들>의 영향을 받은 것으로 보인다. 이 작품이 보여주는 수직적 구도나 과장하게 뒤틀린 인물의 형상, 파란색과 핑크색의 주조 등은 엘 그레코로부터 많은 영향을 받았다고 한다.

작품 왼쪽에 있는 여성의 머리 위에 툭 튀어나온 손은 엘 그레코의 <묵시록적 비전>에서 왼쪽에 있는 사람의 손을 연상시킨다. 눈이 왼쪽으로 심하게 치우쳐 있는 전면의 인물의 얼굴은 고갱의 <저승사자의 눈길> 왼쪽 끝에 나오는 인물의 머리와 유사한데 이것들은 모두 고대 이집트 예술에서 영감을 받은 것이라고 한다.

왼쪽에서 두번째 인물은 미켈란젤로의 <죽어가는 노예>와 고갱이 제작한 <오비리>라는 테라코타 조상을 연상시키며, 양손을 위로 들어올린 여성의 누드와 얼굴 표정은 고야의 <옷을 벗은 마하>를 떠올리게 한다. 전체적으로 5명의 얼굴 모습은 피카소의 조국인 이베라아의 고대 조각상과 유사하다.


1907 | 캔버스에 유화 | 243.9 X 233.7cm | 뉴욕, 현대미술관

그러고 보면 하늘 아래 '새로운 것'은 없다는 생각이 절로 든다. 사람들은 마치 그 아이디어를 자신이 직접 생각해 낸 것으로 생각하지만 실제로는 기존의 것을 재배치하고 자신의 생각을 조금씩 덧대어서 발전시켜 나간 것일 따름이다.

우리가 다른 사람의 발명품으로 현재와 같은 혜택을 누리듯, 우리의 지혜와 발명품은 다른 사람 또는 후세에게 도움이 되도록 준비할 일이다. 내가 거인의 어깨에 올라타 있음으로 인해 좀더 멀리 볼 수 있듯, 나 또한 다른 누군가를 위해 어깨를 빌려줄 일이다.


예제 파일 내려받기


할까 말까 약간 망설이고 있었는데, '탭에 이미지 컨트롤을 삽입하는 방법'에 대해 질문을 주신 분이 있군요. 업무상 피가 되고 살이 될 것... 같지는 않습니다만, 디카로 찍은 사진들을 잘 보관해 두었다가 나만의 갤러리를 만들어 보는 것도 나름대로 재미가 있을 법 합니다.

<완성 예>

예제 파일을 열고 'My Gallery' 탭에 있는 'One Fine Day' 컨트롤을 클릭하면 이미지 컨트롤이 아래로 좌르륵~ 펼쳐지며, 이미지를 클릭하면 해당 웹 사이트가 열립니다. 어떤가요? 생일이나 각종 기념일 선물로도 손색이 없을 것 같지 않습니까? 그렇다고 이것만 믿고 결혼기념일이나 생일을 맞이하야 정략적으로(?) 깜빡하지는 마시구요... ^^;

어떻게 만드는지 작업 순서를 알아보도록 하죠.

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

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

3. 'Office 2007 Custom UI Editor'를 실행하여 앞에서 작성한 매크로 사용 통합 문서를 불러옵니다. XML로 다음과 같은 리본X 코드를 작성합니다.

<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>

<ribbon>

    <tabs>

        <tab id="MyTab" label="My Gallery" insertBeforeMso="TabHome">

        <group id="grpImage" label="Insert Image">

            <gallery id="MyGallery1" label="One Fine Day" size="large"

                columns="3" itemWidth="133" itemHeight="100"

                    imageMso="PictureInsertFromFile" onAction="WhatShallIDo">

                <item id="pic_01" image="pic_01"/>

                <item id="pic_02" image="pic_02"/>

                <item id="pic_03" image="pic_03"/>

                <item id="pic_04" image="pic_04"/>

                <item id="pic_05" image="pic_05"/>

                <item id="pic_06" image="pic_06"/>

                <item id="pic_07" image="pic_07"/>

                <item id="pic_08" image="pic_08"/>

                <item id="pic_09" image="pic_09"/>

                <item id="pic_10" image="pic_10"/>

                <item id="pic_11" image="pic_11"/>

                <item id="pic_12" image="pic_12"/>

            </gallery>

        </group>

    </tab>

</tabs>

</ribbon>

</customUI>

여기까지는 이전에 살펴본 리본 커스터마이징 방법과 크게 다르지 않습니다만, 이미지를 삽입하는 경우에는 한 가지 과정이 추가됩니다. 일단 필요한 이미지는 특정한 위치에 저장되어 있다고 가정하고 진행합니다. 여러분 PC에서 이미지 파일이 있는 폴더를 지정하시면 되겠습니다.

4. Customer UI Editor에서 'Insert Icons' 아이콘을 클릭합니다. 'Insert Custom Icons' 대화상자에서, 삽입할 이미지들을 선택하고 '열기' 버튼을 클릭합니다.

에디터의 우측 창에 삽입될 이미지의 썸네일(Thumbnail) 이미지가 표시되면 제대로 된 것입니다.

만약 삽입된 이미지의 ID를 변경하거나 삭제하려면 해당 썸네일(Thumbnail)을 마우스 오른쪽 버튼으로 클릭하고 단축 메뉴 중에서 선택하면 됩니다.

5. 'Generate Callbacks' 아이콘을 클릭하여 콜백 프로시저를 만들고, 범위를 지정한 다음 복사합니다.

6. 'Save' 버튼을 클릭하여 현재 파일을 저장합니다.

7. 엑셀로 되돌아와서 해당 파일을 엽니다. '개발 도구' 탭의 'Visual Basic' 컨트롤을 클릭하여 모듈 시트를 삽입하고, 앞에서 복사한 콜백 프로시저를 붙여 넣습니다. 다음 코드를 참고로 콜백 프로시저의 내용을 작성합니다. 각 사진별로 좀더 의미있는 내용을 삽입하려면 이 코드의 내용을 보완하면 됩니다.

Sub WhatShallIDo(control As IRibbonControl, id As String, index As Integer)
    Select Case index + 1
        Case 1: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic242.asp"
        Case 2: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic243.asp"
        Case 3: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic244.asp"
        Case 4: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic246.asp"
        Case 5: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic266.asp"
        Case 6: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic268.asp"
        Case 7: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic278.asp"
        Case 8: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic278.asp"
        Case 9: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic279.asp"
        Case 10: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic279.asp"
        Case 11: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic303.asp"
        Case 12: OpenMyWeb "http://www.iexceller.com/MyPhotos/Pic342.asp"
    End Select
End Sub


Private Sub OpenMyWeb(strX As String)
    On Error GoTo ET
    ActiveWorkbook.FollowHyperlink Address:=strX, NewWindow:=True

ET:
    If Err.Number <> 0 Then
        MsgBox strX & "사이트를 열 수 없습니다", , "Error Number : " & Err.Number
        On Error GoTo 0
        Err.Clear
    End If
End Sub

이제 파일을 닫은 다음 다시 열어서 확인해 보세요. 'One Fine Day' 버튼을 클릭했을 때 나타나는 이미지의 열 수나 크기는 앞의 '3'단계에서 굵게 표시한 리본X 코드를 적당히 손보시면 되겠습니다. 물론 이미지가 더 추가되거나 삭제하는 경우라면 <item> 태그를 상황에 맞게 조절해야겠죠?

잘 응용하면 영상 카드나 디지털 앨범으로 확장하는 것도 얼마든지 가능합니다. 여러 가지로 응용해 보시고, 재미있는 것이 나오면 Exceller에게도 살짝 알려주세요. 꼭이요~~


Previous

Next

Creative Commons License