CommandBar명령줄에도 Control이 있고 UserForm에도 Control들이 있다...부르는 소리는 같아도 전혀 종자가 틀린 물건들이다 UserForm의 자식들인 Control을 UserForm에서만 사용하지 않고 Worksheet오브젝트에서도 빌려서 사용하고 프로그래밍에 아주 유용한 물건이고 없어서는 안될 물건이니 여러 페이지에 걸쳐서 진행하도록 하자
초보님들을 항상 헷갈리게 하는 이 두개의 물건을 구별해 보자 아래의 그림과 같이 엄연히 족보가 틀린놈들인데 헷갈린다 양식도구상자의 콘트롤이던 콘트롤도구상자의 콘트롤이던 명령줄의 콘트롤이던 모두가 하나의 작은 프로그램이다 그리고 사용자의 시각적으로 볼수 있게 만든 물건이다 여러분이 만들 프로그램의 하나의 부속품역할을 하는 것들이다 콘트롤은 엑셀에만 있는것이 아니고 모든 다른 프로그램들도 갖고 있다 예를 들어 웹에서도 유사한 용도의 콘트롤들을 사용한다 체크박스를 지우시면 본래대로 돌아갑니다 Good Morning!!! EXCEL ACCESS POWERPOINT WORD
위의 콘트롤을 크릭하면서 느꼈을것이다.. 콘트롤은 사용자가 정보를 전달하는 도구로구나!! 자판을 두들겨서 사용자가 정보를 전달하는것 보다는 훨씬 편리하다 콘트롤은 위와 같이 간편한 마우스만 딸깍거리면 정보를 프로그램에게 전달하게 되는것이다 프로그램개발도구마다 저마다 더 좋은 콘트롤을 제공할테니 이 개발도구를 사용하십시요!!라고 떠들게 된다 아래의 표는 이 페이지의 써버쪽 엔진인 ASP.NET 2.0의 GridView라는 콘트롤이다 이것도 역시 개발자가 아주..아주 간단하게 필요한 정보만 콘트롤에 속성만 전달하면 데이타베이스에서 알아서 후루룩 정보를 뽑아올린다 그냥 테이블 하나가 GridView라는 콘트롤이고 이 콘트롤에 어떤 데이타베이스에서 어떤 테이블과 어떤 테이블에서 어떤 정보를 어떻게 보고 싶은데??? 그리고 모양을 어떻게 낼래??색깔을 좀 쓸까..??글자체는 어떤것을 쓰랴?? 열머리를 크릭하면 정렬이 되게 할까..말까?? 등등에 해당하는 속성값만 주면 알아서 뽑아 올리는것이다
위의 콘트롤은 Northwind.mdb화일과 연결된것이고 보고 싶은데(SQL문)로 뽑아서 보는것이다 이런 식으로 엑셀도 하나의 개발 도구인 것이고.. 실은 프로그램 자체가 전체적인 의미에서 하나의 콘트롤이고 앞으로 계속 다루게 될 챠트..피봇테이블등등도 실은 모두 하나의 콘트롤이고 또 이것을 하나의 오브젝트들이라고 할수 있겠다 본론으로 돌아가서 콘트롤도구상자의 콘트롤 혹은 명령줄의 콘트롤들은 모두가 시각적으로 접근하기 편리하고 사용자가 간단히 정보를 전달하는 수단으로 사용하는 오브젝트인것이다 이해하기 쉽게 설명하려는것이 더 복잡해 진것 같다 아무튼 그냥 간단히 아래의 그림과 같이 두가지 비슷한 녀석들이 떼지어 있고 구분하여 사용하면 될것이다 그림과 같이 양식도구상자의 콘트롤은 엑셀의 구버전에서 사용되던 간략한 대화상자에서 사용되는 콘트롤을 워크시트에서도 사용하게 한것이고 콘트롤도구상자의 콘트롤은 최근 버전의 UserForm이라는 좀더 지능화된 대화상자의 것이고 이것을 워크시트에서 빌려서 사용하는것이다
양식콘트롤의 콘트롤은 지능이 낮고 콘트롤도구상자의 콘트롤은 지능이 높다는것은 무엇을 의미하나?? 아래의 그림은 하나는 양식콘트롤의 드롭다운 상자이고 다른 하나는 콘트롤도구상자의 콤보박스이다 참으로 헷갈린다..비슷한 놈의 물건에 또 비슷비슷한 이름에 어쩔수가 없다 MS의 엔지니어들도 즈이들도 버전이 업되면서 새롭지만 구버전과 비슷한 물건에 이름을 새로 붙이려니 얼마나 헷갈리겠는가?? 아무튼 프로그래밍은 이름짓는 일이 반이라고 해도 과언이 아니라는것을 새삼 느끼면 다행이고 헷갈리게 하더라도 잘 가려서 챙기시기 바란다 정치꾼들 정당이름 헷갈리게 짓는것과 비슷한 일들이다 모두가 민주주의하고 잘살게 하는것 한다는 내용은 똑같은데 이름을 다르게 지으려니 골빠질일이다 콤보상자나 드롭다운 상자나 생긴모양은 똑같다 콘트롤도구상자에서 그린 콤보상자는 속성이 훨씬많아서 그림과 같이 바탕색도 주고 글자의 색상도 줄수 있지만 양식에서 그린 드롭다운 상자는 지극히 간단한 최소한의 기능(지능)만 갖고 있다 양식도구상자에서 버튼을 시트에 그리면 매크로지정을 하라는 대화상자가 자동으로 나타난다 취소한후 나중에 다시 버튼을 오른쪽마우스로 크릭하여 단축메뉴에서 매크로연결을 선택하여도 된다 매크로대화상자에서 연결하고 싶은 프로시져를 선택하면 버튼이 크릭하면 연결된 프로시져가 실행된다 지극히 간단한 역할을 한다 그러나 콘트롤도구상자에서 버튼을 선택하여 그리면 무언가 양식도구상자의 것과는 틀리게 복잡해 보인다 콘트롤도구상자의 콘트롤은 수식에 나타난것과 같이 Embed라는 단어의 의미대로 워크시트에 붙박이로 팍 박힌 오브젝트가 된다 콘트롤도구상자는 그림과 같이 디자인모드와 실행모두가 구분되어 있다 도구상자의 버튼을 실행모드로 바꿔주어야 정상적인 실행모드가 된다 실행모드로 바꾼 상태에서는 버튼을 마우스로 아무리 선택하려고 해도 선택되지 않고 이동할수도 없다 양식도구상자의 것은 그런 구분이 없다 아무때나 마우스로 선택되고 이동되는 도형오브젝트에 속하는 지능이 별로 없는 간단한 오브젝트다
양식상자의 버튼과 콘트롤도구상자의 버튼은 프로시져를 연결하는 일이 아래의 그림과 같이 전혀 틀리다 콘트롤도구상자의 버튼은 해당시트의 모듈시트에 가서 보면 그림과 같이 이벤트프로시져가 시트모듈상에 준비되어있다 이벤트프로시져에 아래와 같이 코딩을 해보자
Private Sub CommandButton1_Click() CommandButton1.Left = CommandButton1.Left + 10 CommandButton1.Top = CommandButton1.Top + 10 End Sub
양식버튼에서 크릭한 자신을 알아내려면 어떤 속성을 사용했는지 기억 나시는지??? 위와 똑같은 효과를 내려면 아래와 같이 하여야한다
Sub yourDefinedProcedureName() Dim sButtonName As String Dim oBtn As Button Set oBtn=Activesheet.Buttons(Application.Caller) oBtn.Left=oBtn.Left+10 oBtn.Top=oBtn.Top+10 End Sub
두개의 커다란 차이는 콘트롤도구상자는 자신의 이름 자체를 호출하면 해당 버튼에 접근하게 되는것이고 양식의 버튼은 몇단계를 거쳐야 접근한다는 점이다 또한 양식의 버튼은 아무 매크로나 연결을 하지만 콘트롤도구상자는 반드시 자신의 프로시져내에서 처리하도록 되어있다 아래의 화일에서 두개의 버튼(양식버튼과 콘트롤도구상자의 버튼)으로 크릭할때마다 이동하고 어느 지점에 도달했을때는 다시 왼쪽으로 돌고 또 어느지점에 도달하면 위로 향하고 이런식으로 계속 회전하면서 돌도록 만들어 본다 순환문과 조건문을 배울때 흔히 하는 연습도구이다 순환문과 조건문이 자유롭지 않으면 코딩할때 머리가 다 빠질수 있다 아래와 같은 사항을 살펴본다
아래의 그림과 같이 만들어 본다 Compare ExcelControl UserFormControl And Use User Defined Variable