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

Shape|FillFormat|Shape|FillFormat|Fill|OneColorGradient|Array|
|Split|ForeColor|BackColor|
|ScrollBar|OptionButton|Transparency|TwoColorGradient|

Shape오브젝트를 좀더 자세하게 살펴보도록 하자

도형의 내부 서식하기(FillFormat오브젝트사용하기)

도형의 내부를 서식(Format)한다고 하는것은 도형의 Fill속성을 부르면
FillFormat오브젝트가 호출되는 셈이라고 앞페이지에서 설명했다
그럼 FillFormat오브젝트의 어떤 속성이나 메소드를 사용하면
어떤 결과를 갖여 오는지 보도록 하자
아래의 도형의 이름을 shpTest라고 지어 주고
이 Shape오브젝트의 Fill속성(FillFormat오브젝트)를 다루어 본다


내부색상을 안보이게 하기
내부색상을 흰색으로 칠하기
내부색상을 노랑색으로 칠하기


중요한것은 FillFormat.Visible속성을 msoFalse로 주면(혹은 False)
FillFormat오브젝트자체가 안보이는것이다
내부서식이 빈탕이 되는것이다
그리고 Fill.Solid 메소드는 색상에 톤의 변화나 투명도등을 전혀주지 않는
순수한 한가지 색상을 표현한다
이것이 무슨 소리인지는 다음을 보면 된다

도형내부색상에 Gradation을 주기

Gradation이란 색상의 명도차이를 부드럽게 점차적으로 변화를 주어
색상을 입체감이 나게 표현하는것이다
Fill.Solid 메소드와는 반대가 되는 표현이 된다
Solid는 말 그대로 순수한 한가지 색상을 표현하는것이다
아래 코드의 하이퍼링크된 부분들을 크릭해 보시기 바란다

Dim shpX As Shape
Set shpX = ActiveSheet.Shapes("shpTest")
With shpX.Fill
   .ForeColor.SchemeColor = 13
   .Transparency = 0#
   .OneColorGradient msoGradientHorizontal, 1, 0.23
   .OneColorGradient msoGradientVertical, 1, 0.23
   .OneColorGradient msoGradientDiagonalUp, 1, 0.23
   .OneColorGradient msoGradientDiagonalDown, 1, 0.23
   .OneColorGradient msoGradientFromCorner, 1, 0.23
   .OneColorGradient msoGradientFromCenter, 1, 0.23
End With


OneColorGradient메소드의 역할을 하셨을것이다
그런데 매개변수를 3개를 전달한다
첫번째인수는 어떤 방향으로 변화를 줄것인지를 표현하고
두번째인수는 방향은 같더라도 변화의 시작위치를 표현한다
아래의 빨강색숫자를 크릭해 보시기 바란다

With shpX.Fill
   .ForeColor.SchemeColor = 13
   .OneColorGradient msoGradientHorizontal, 1 , 0.23
End With


채우기효과대화상자의 아래를 선택한것과 같은 결과이고
세번째인수는 아래의 오른쪽그림의 어둡게/밝게를 조정한 값과 같다


2번째 인수가 1~4까지 적용되지만 예외가 있다 아래와 같은 경우는
1~2까지만 적용된다
빨강색숫자를 크릭해 보시기 바란다

With shpX.Fill
   .ForeColor.SchemeColor = 13
   .OneColorGradient msoGradientFromCenter, 1 , 0
End With



3이나 4를 2번째인수에 주면 "지정한 값이 범위를 벗어났습니다"라는 에러가
발생한다
프로그래밍을 하다 보면 이런 경우가 허다 하다
그러나 엑셀은 매크로기록기라는것을 제공하기때문에 만들고 싶은것을
매크로 기록을 한후 필요한 상수명이나 전달할 매개변수등을
수시로 알아보면서 코딩을 할수 있다는 점!!
을 잘 활용하면 아주 효율적인 프로그래밍도구가 되는것이다

Transparency속성으로 도형의 투명도를 조정한다

또한 도형의 투명도(Opacity)를 조정할수 있다
아래의 그림과 같이 앞의 도형의 투명도를 0과 1사이에서 조정을 하면
투명도를 조정하여 뒤에 있는 도형을 보이게 할수 있다



문서의 글자가 도형뒤에 은은하게 나타나게 할수 있는
좋은 기능이다

두가지 색을 사용하는 도형 내부색상에 Gradation을 주기

Fill속성, 즉 FillFormat오브젝트의 속성을 보면
ForeColor와 BackColor두개의 속성이 있다
위의 경우에 ForeColor속성을 사용하여 한가지 바탕색을 사용하였다
한가지 색상을 바탕색으로 할때..상식적으로 BackColor속성을
사용해야하지 않나??라고 의아해 할수도 있겠지만
그들이 만들기를 그렇게 만들었으니 그렇게 사용하여야 말을 듣는다
그럼 BackColor속성은 어떤때 사용하나??아래의 그림과 같다
BackColor,ForeColor속성을 설정해 주어야
두가지 색상의 Gradation을 수행하는
TwoColorGradient메소드가 일을 할수 있는것이다

With shpX.Fill
   .ForeColor.SchemeColor = 13
   .BackColor.SchemeColor = 50
   .Transparency = 0
   .TwoColorGradient msoGradientHorizontal, 1
End With



스크롤바,옵션버튼,명령버튼과 3개의 매개변수의 연결

프로그래밍이란 어떤 정보를 전달하고 어떤 결과를 얻어가는 과정의
설계작업이다
아래의 화일에서 OneColorGradient 메소드의 3개의 매개변수에
3개의 콘트롤에서 발생하는 값을 전달하면서 도형의 서식을
자동으로 바꿔나가는 과정을 설계해 보자
동영상이 시원찮아서 색상의 변화가 엑셀화일에서의 것과
같이 부드럽지 않다



아래의 화일에서는

  • 정보를 담은 문자열 정보를 상수로 만들어 사용하기
  • 다양한 정보를 복합적으로 보관한 문자열을 배열로 분해하기
  • 여러개의 콘트롤을 하나의 프로시져에 연결하기
  • 여러개의 콘트롤의 경우를 따지기 보다는 간단한 논리표현식을 변수에 담기
  • 외부변수의 값을 어디에서 만들고 어디에서 소비하나?


Use Shape FillFormat With ScrollBar OptionButton

오브젝트를 이해하는데 도움을 주는 도형

유난스럽게 도형부분에서 자세하게 설명을 하고 있다
이유는 프로그래밍은 오브젝트를 이해하지 못하면 현대의 프로그래밍은
할수 없기 때문이다
그런 의미에서 도형이나 다른 오브젝트들에 대하여서도
계속 나오겠지만..특히나 도형은 오브젝트를 이해하기 쉽기 때문이다
컴퓨터 프로그래밍은 정보를 다루는것이고..
정보를 어떻게 하면 체계적으로 잘 관리하느냐가 문제인것이고
그런 이유를 만족시키기 위하여 오브젝트가 만들어져서 사용되는것이다
아래를 잠깐 보자

with 도형 .도형의 타입="" .도형의 높이=" .도형의 폭="" .도형의 X위치="" .도형의 Y위치="" .바탕색색상="" .바탕색명도="" .바탕색투명도="" .바탕색="" .그림자색상="" .그림자명도="" .그림자투명도="" .외곽선색상="" .외곽선투명도="" .외곽선스타일="" .문자정보의 값="" .문자정보의 글꼴="" .문자정보의 크기="" .문자정보의 색상="" ... ... ... ... .등등... .기타 필요한것이 버전업되면서 추가되게 될것이다 End With

위와 같이 Shape오브젝트가 위의 정보외에도 많은 정보를
혼자서 몽땅 갖고 있다고 치자..
관리하기가 쉬울까??
우리의 일상생활과 같은것이다
정보의 관리를 한부서에서 너무 많이 하면
하부 부서를 만들어서 일의 일부를 떼어서 관리를 시키는것은 상식이다
오브젝트도 결국은 상식선에서 필요함을 느껴서 만들어지게 된것이다
그래서 도형중에서 바탕서식을 관리하는 FillFormat이라는것이 생기고
그림자부분을 관리하는 ShadowFormat이라는 오브젝트가 생기고
외곽선을 관리하는 LineFormat오브젝트가 생기고
도형내의 문자를 관리하는 TextFramt오브젝트가 생기고
자연스럽게 생기게 되는것이고
이런 것이 복잡하게 많다고 하는것은
지능이 높아진 오브젝트가 되는것이고
지능이 높다고 하는것은 하는 일 자체가 섬세해진다는것이고
그러니 오브젝트를 잘 이해한다고 하는것은
값나가는 프로그래밍을 할수 있는 능력이 된다는것이다
그러니 열심히들 하셔서
엉터리 엑셀프로그래머들이 되지 마시고
제대로 엑셀을 백분활용하시는 분들이 되시기 바란다