Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Controls On Sheet|User Defiened Variable|Type|End Type|User Defined Variables|
|Activesheet.Buttons|Application.Caller|DoEvent|

CommandBar명령줄에도 Control이 있고 UserForm에도 Control들이
있다...부르는 소리는 같아도 전혀 종자가 틀린 물건들이다
UserForm의 자식들인 Control을 UserForm에서만 사용하지 않고
Worksheet오브젝트에서도 빌려서 사용하고
프로그래밍에 아주 유용한 물건이고 없어서는 안될 물건이니
여러 페이지에 걸쳐서 진행하도록 하자

양식콘트롤과 콘트롤도구상자의 콘트롤

초보님들을 항상 헷갈리게 하는 이 두개의 물건을 구별해 보자
아래의 그림과 같이 엄연히 족보가 틀린놈들인데 헷갈린다



양식도구상자의 콘트롤이던 콘트롤도구상자의 콘트롤이던
명령줄의 콘트롤이던 모두가 하나의 작은 프로그램이다
그리고 사용자의 시각적으로 볼수 있게 만든 물건이다
여러분이 만들 프로그램의 하나의 부속품역할을 하는 것들이다
콘트롤은 엑셀에만 있는것이 아니고 모든 다른 프로그램들도
갖고 있다
예를 들어 웹에서도 유사한 용도의 콘트롤들을 사용한다



체크박스를 지우시면 본래대로 돌아갑니다

Good Morning!!!



위의 콘트롤을 크릭하면서 느꼈을것이다..
콘트롤은 사용자가 정보를 전달하는 도구로구나!!
자판을 두들겨서 사용자가 정보를 전달하는것 보다는 훨씬 편리하다
콘트롤은 위와 같이 간편한 마우스만 딸깍거리면
정보를 프로그램에게 전달하게 되는것이다

프로그램개발도구마다 저마다 더 좋은 콘트롤을 제공할테니
이 개발도구를 사용하십시요!!라고 떠들게 된다
아래의 표는 이 페이지의 써버쪽 엔진인 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

두개의 커다란 차이는 콘트롤도구상자는 자신의 이름 자체를
호출하면 해당 버튼에 접근하게 되는것이고
양식의 버튼은 몇단계를 거쳐야 접근한다는 점이다
또한 양식의 버튼은 아무 매크로나 연결을 하지만
콘트롤도구상자는 반드시 자신의 프로시져내에서 처리하도록 되어있다

아래의 화일에서 두개의 버튼(양식버튼과 콘트롤도구상자의 버튼)으로
크릭할때마다 이동하고
어느 지점에 도달했을때는 다시 왼쪽으로 돌고
또 어느지점에 도달하면 위로 향하고 이런식으로
계속 회전하면서 돌도록 만들어 본다
순환문과 조건문을 배울때 흔히 하는 연습도구이다
순환문과 조건문이 자유롭지 않으면 코딩할때 머리가 다 빠질수 있다

아래와 같은 사항을 살펴본다

  • 사용자정의 변수의 활용(Type Structure)과 어떤때 필요한가?
  • 사용자정의 변수는 나중에 나올 Class모듈의 유치한 단계
  • 사용자정의 변수는 반드시 일반모듈시트에 작성한다
  • 일반모듈에서 시트모듈에 있는 프로시져를 호출해본다
  • 지능이 높은 놈과 지능이 낮은 놈은 무게 차이가 나네??!!
  • 지능이 높다는것은 계산할일이 많다는것이다..그러니 차이가 난다!!
  • 그렇다면 단순한 매크로 실행용버튼으로 사용한다면
  • 양식도구상자의 버튼이 유용할수 있고 효율적일수 있다는 이야기
  • 두개의 특성을 알고 상황에 따라서 활용하면 된다
  • 변수의 활용에 따라서 복잡해 보이는것이 간단하게 해결된다

아래의 그림과 같이 만들어 본다



Compare ExcelControl UserFormControl And Use User Defined Variable