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

Shape|Range|Characters|XML|PowerPoint|Shape|CodeName|Fill|FillFormat|ForeColor|ColorFormat|
|Line|LineFormat|Shadow|ShadowFormat|
|Split|InStr|UCase|Len|Characters|OffsetX|OffsetY|
|Transparancy|Replace()|

도형오브젝트를 살펴보면서 아래와 같은것을 감잡았다면
관찰력과 생각이 깊으신 분들이다

WorkSheets.Add
WorkSheets.Add

위와 같이 WorkSheet오브젝트를 계속 만들어 나갈수 있었고
계속 만들어진것은 WorkSheets라는 집합체오브젝트가 관리하였었다
즉 WorkSheet하나,하나의 오브젝트는 계속 생성될수 있는것이다
또한 Shape오브젝트도 역시 마찬가지였다

ActiveSheet.Shapes.AddShape(Type,Left,Top,Width,Height)
ActiveSheet.Shapes.AddShape(Type,Left,Top,Width,Height)

와 같이 계속 생성되어 가고 Shapes라는 집합체오브젝트가 역시 관리하였다
그런데 Shape오브젝트의 하부 오브젝트인

ActiveSheet.Shapes.AddShape(Type,Left,Top,Width,Height).Fill

에서 Fill은 FillFormat오브젝트에 접근한다고 했다
이것은 계속 만들어지는것이 아니고 하나의 Shape오브젝트가 하나씩
갖고 있는 오브젝트인것이다
또한 Range오브젝트도 역시 추가하여서 만드는것이 아니고
각각의 WorkSheet오브젝트에 이미 존재하는 하부 오브젝트에 접근하는것이다
이렇게 제각각의 성질머리들을 잘 챙겨 가면서 보시기 바란다

그러면 또 어떤 분은 이런 생각을 갖을수도 있다
도형하나에 여러가지 바탕서식을 준비해두고(여러개의 FillFormat오브젝트)
어떤 때는 이런것을,어떤때는 저런것을 사용할수 없을까??
좋은 생각인것이다
이런 의문과 욕구를 갖는다면 참으로 좋은 일이다
이런것을 나중에 Class모듈등을 적절히 활용하여 원하는대로 만들수 있을것이다

이번 페이지에서는
Shape.Line속성으로 만들어지는 LineFormat오브젝트
Shape.Shadow속성으로 만들어지는 ShadowFormat오브젝트등을
Shape.TextFrame.Characters속성으로 만들어지는 Characters오브젝트등을
자세히 살피면서 재미있는(재미가 있으려나??)프로그램을 만들어 보자

가래잡고 도랑치는 그런것이 항상 좋다
영어를 배우다 보면 접속사를 익히는것도 하나의 큰일이다
40여개의 문장을 통하여 접속사(Conjunctions,Linking Words)를 끝내 보는 툴이다
특히나 접속사에는 프로그래밍키워드를 알면 자연히 아는 그런
접속사들이 많다..Until,While,If등등..

Characters,ShadowFormat,LineFormat,FillFormat오브젝트

개체지향적프로그래밍(OOP)을 하는 이유는 아래와 같이

Shape.TextFrame.Characters.Text="xxx"
Range("A1").Characters.Text="xxx"

프로그래밍을 하다가..개체지향의 컨셉에 푹 빠져들때..
아하!!!~~영어라는 더럽게 어렵다고 생각하는것도 역시 개체지향적으로
이루어졌구나...를 아는 순간..어순감각..생각하는 방식이 개체지향적
으로 바뀌게 될것이다..
영업부 밑에 시장조사과를 두었다
생산부의 밑에도 시장조사과가 필요하다고 한다
영업부밑의 이미 구조적으로 기능적으로 구성된 틀을
생산부밑에 구성하기는 쉬워질것이다
별도로 일의 성격을 구상하고 정리하고 조직하고 할필요가 없는것이다

Characters오브젝트를 도형의 TextFrame오브젝트에서도 사용하고
Range오브젝트에서도 사용하도록 하니..
엑셀을 만든 사람들은 한쪽에서 사용하던 오브젝트를
다른 오브젝트의 하부오브젝트에 조립시켜 버리면 시간을 버는 셈이다
직접실행창에 아래와 같이 입력해 보시기 바란다

range("A1").Characters.Text="xxxx"

라고 입력후 엔터키 치면 현재의 시트의 A1셀에 값이 들어간것을
볼수 있을것이다
이것을 직접실행창에서 아래와 같이 알아 보면

?range("A1").Value
xxxx

Value값으로 전환 되어 있는 것을 알수 있다

Characters오브젝트를 어떻게 활용하는지 보도록 하자
아래와 같이 데이타(문제지)가 시트에 줄줄이 담겨있다



A열의 문제는
You can come to the meeting ______ you don't say anything

이고 접속사가 들어갈 부분이 ___표시로 되어 있다
이것을 B열에 선택 접속사를
so that|as long as|while|as if|so|although|when|since 등으로
입력해 놓고
C열에 정답번호인 2번 즉 as long as라는 접속사를 선택하면 맞는것이다
위의 데이타를 읽어서 아래 그림의버튼을 크릭할때마다
사용자가 질문에 답을 할수 있게 하는것이다



이 작업을 위하여 Character오브젝트의 활용이 필요하고
ShadowFormat오브젝트,LineFormat오브젝트를 활용한다
아래의 화일에서는

  • "so that|as long as|while|as if" 문자열정보를 배열화시키기(Split,Variant)
  • 도형에서 그림자의 모양을 조절하기(ShadowFormat)
  • 도형의 외곽선의 모양을 조절하기(LineFormat)
  • 문장중에서 원하는 단어만 서식하기(Characters)
  • 상수는 어떤때 만들어서 활용하나?(CONST)
  • 도형이 생성되면서 매크로연결은 어떤 속성이 하나?(OnAction)
  • 여러개의 이벤트가 반드시 공유하여야할 전역변수(Global Variable)
  • 도형에 글씨가 있을때 도형의 크기를 자동조정하고 싶다면 어떤 속성?(AutoSize)
  • 데이타에 있는 문자를 사용자가 볼때는 대문자로 보이게 하고 싶다(UCase)
  • 그림자의 위치이동은 어떤 속성?(OffsetX,OffsetY)
  • 데이타시트의 모든 정보가 들어있는 범위를 찾고 싶다(UsedRange)
  • 문자열중에서 특정단어의 위치를 알고 싶다(InStr)
  • 파워포인트자동화를 위한 문제지에 대한 정보들의 배열화작업을 엑셀에서 해준다(Debug.Print)
  • 엑셀이 도와주지 않는다면 40여장의 스라이드를 일일이 만들거나..다른 머리를 써야 할껄!!

PowerPoint로 만들어 보기


66


XML/엑셀은 다른 프로그래밍을 위한 준비도 해준다?

위에서 엑셀화일의 데이타시트에 있는 내용을 파워포인트에서
활용하기 위하여 엑셀에서 데이타시트의 내용을 읽어내어
파워포인트의 모듈시트를 위한 배열변수를 만들어서 파워포인트를
구현시켰었다
엑셀은 엑셀자체의 자동화뿐만 아니라
다른 프로그램의 자동화작업을 위한 잡다한 일들을 해주는 편리한
도구로서도 활용되는것이다
이번에는 웹사이트에서 활용하게 XML문서를 만든후
써버에 올리고 웹문서에서 자동화를 해보도록 한다



좀더 진도가 나가면 XML이라는 것에 대하여도
당연히 진행할것이지만 우선 이곳에서 XML문서의 활용을 잠깐 보았다
위의 버튼을 크릭하면 나타나는 정보들은 XML문서의 내용을
엑셀워크시트의 내용을 읽듯이 간단하게 읽어서 처리한다

컴퓨터 프로그래밍은 데이타의 관리라고 누차 이야기하였다
워크시트의 데이타시트의 내용을 만약 파워포인트에서 읽어서
처리하고 싶다면 VB로 하더라도 엑셀을 열고 엑셀시트에 접근하고
데이타를 읽어내는 작업을 하여야 한다
엑셀화일을 열지 않고 한다면 DAO나 ADO로 데이타베이스로서
읽어 오기도 하고
그러나 더 간단한 방법은 엑셀시트를 텍스트 문서로 작성하고
일반 텍스트문서이던(txt확장자)엑셀에서 제공하는 CSV화일로
작성하고 읽어내던가 할수 있다
그러나 가장 최근의 방법은 텍스트문서는 텍스트문서인데
데이타를 구조적인 정리정돈이 된 텍스트문서...
즉 XML문서로 작성하고 활용하는것이 가장 좋은 방법이라고 할수 있겠다

또한 위의 파워포인트에서도 문제에 대한 정보를
배열로 모듈에 옮겨서 배열을 읽어서 처리했지만
정보의 량이 커지면 모듈시트에 모두 처리하는것은 무식한 짓이 된다
이것도 역시 XML문서를 읽어서 처리할수 있는것이다

Characters오브젝트는 Range오브젝트도 갖고 있다

이번 화일에서는 위의 화일을 좀더 보완하고
Shape오브젝트에 Characters오브젝트가 있듯이
Range오브젝트에서도 지원을 하고 있다는 것을
그림과 같이 보도록 한다



뜻이 있으면 관련접속사에 해당 하는 예문을 더 만들어서 추가 해도 될것이다
이렇게 직접 만들다 보면 외우고 싶은 영어도 그냥 외워지고
가재(엑셀)도 잡고 도랑(영어)도 치우고
자녀에게 좋은 교육툴을 만들어 줄수도 있고
회사의 다양한 정보를 화끗하게 처리할수 있는
아이디어도 쏟아져 내는 유능한 능력자도 될수 있고
정보를 수집하는 습관도 갖게 되어 즐겁고..

아래의 화일에는

  • Range오브젝트에서 문장의 일부만 서식을 한다(Characters)
  • 엑셀시트의 많은 정보를 파워포인트에서 읽어서 처리하게 할수 없을까?(XML)
  • 여기에서 파워포인트는 XML문서를 참조하기때문에 웹에서 처리곤란하니 화일내부에서 별도로 다운 받는다
  • XML만들기 버튼 크릭하여 XML화일을 만든후 파워포인트를 다운 받아 실행하시기 바란다
  • 이런 경우,파워포인트에 일일이 많은 스라이드를 작성할 필요가 없군..흠흠흠..!!!(Separating Data File)
  • 매크로대화상자에 매크로이름이 나타나지 않게 할수 없을까?(Optional)
  • 현재의 상황을 항상 유지하고 여러곳에서 읽어내는 연습(Global Variable)
  • 중복되는 작업은 항상 분리하여 별동대를 유지(Function,SubProcedure)
  • 하나의 셀에 여러개의 정보를 보관하고 처리하고 싶다(String,Array)


Range Shape Characters PowerPoint XML