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

CommandBar|CommandBars|CommandBar|Item|Name|OnAction|
|NameLocal|BuiltIn|Type|Controls|Caption|TopLeftCell|
|DoEvents|Reset|ShowPopup|Controls.Add|OffSet|
|CommandBars.Add|Parent|Buttons.Add|Worksheets.Add|

CommandBar오브젝트

Window,Range,WorkSheet,WorkBook,Application오브젝트등을
대강 살펴 보았고 이제 다른 오브젝트를 하자
각각의 페이지에서 해당오브젝트를 완벽히 설명없이 다른
오브젝트로 가지만 다른 오브젝트를 설명하면서
앞에서 각각의 오브젝트부분에서 설명하지 못한것을 추가
보충하면서 진행한다

이 페이지에서 이야기 하려고 하는 CommandBar오브젝트도 결국은
Application오브젝트의 직속하위 오브젝트이다
그러나 오브젝트를 바꿔서 이야기하더라고 앞에서 이야기 하였던것들을
상호 관련시켜가면서 진행된다(Cross Referencing)
앞에서 이야기했지만 오브젝트들은 독립적이면서 상호 부모자식관계등을
유지하는 상호 의존적이기도 한것이다
보기/도구모음/사용자지정메뉴에 의하여 아래와 같은 대화상자를 통하여


자기가 필요한 명령줄과 명령버튼들을 구성하여 사용할수 있다
이것을 프로그래밍적으로 처리하여 사용하기 싶다면
CommandBar(명령줄) 오브젝트에 접근하면 되는것이다
예를 들어서 Sheet1에서 작업할때 사용하는 명령줄과
Sheet2에서 사용하는 명령줄을 다르게 하고 싶다거나 필요한 상황은
많을것이고 CommandBar오브젝트의 속성이나 메소드를 알게 되면
자유스럽게 활용하게 된다
우선 CommandBar오브젝트에 접근하려면 어떤 표현식이 필요한가?
다른 오브젝트와 마찬가지로 하나,하나의 오브젝트를 관리하는
집합체(Collection)오브젝트가 있다는 점을 상기하시고..

Dim oCmdBar As CommandBar
Set oCmdBar=Application.CommandBars("명령줄이름")
혹은
Set oCmdBar=Application.commandBars.Item(인덱스번호)
집합체오브젝트에서 Item은 생략해도 된다 아래와 같이..
Set oCmdBar=Application.commandBars(인덱스번호)

로 하면 되는것이다
그렇다면 명령줄의 이름을 좀 알아야 겠다
아래의 Application을 크릭하시고 나타나는것을 차례대로 크릭하시면
CommandBar오브젝트의 Name속성과 NameLocal속성에서 얻어낸 이름을
볼수 있다(영문이름(Name속성)을 크릭하면 한글표기(NameLocal 속성)으로
얻어낸 값을 볼수 있다
한글표기를 사용하여 CommandBar오브젝트에 접근하려고 하면
에러가 나니 항상 영문이름을 사용하도록 한다
버전마다 약간의 차이는 있으나 아래와 같이 CommandBar가 엑셀화일에
존재한다..참으로 많다!!기능이 많다는 이야기다

엑셀에는 명령줄이 몇개나 들어있나??

엑셀이 갖고 있는 명령줄을 모두 나열해보자
아래와 같은 테이블이 만들어진다

NoNameNameLocalBuiltInControls.CountIndexType
1Worksheet Menu Bar워크시트 메뉴 모음True1011
2Chart Menu Bar차트 메뉴 모음True1021
3Standard표준True2430
4Formatting서식True1940
5PivotTable피벗 테이블True1150
6Chart차트True960
7Reviewing검토True1470
8Forms양식True1680
9Stop Recording기록 중지True290
10External Data외부 데이터True7100
11Formula Auditing수식 분석True12110
12Full Screen전체 화면True1120
13Circular Reference순환 참조True4130
14Visual BasicVisual BasicTrue7140
15WebTrue10150
16Control Toolbox컨트롤 도구 상자True15160
17Exit Design Mode디자인 모드 끝내기True1170
18Refresh새로 고침True2180
19Drawing그리기True22190
20WordArtWordArtTrue9200
21Picture그림True13210
22Query and Pivot쿼리 및 피벗 테이블True17222
23PivotChart Menu피벗 차트 메뉴True6232
24Workbook tabs통합 문서 탭True16242
25CellTrue19252
26ColumnTrue11262
27RowTrue11272
28CellTrue18282
29ColumnTrue18292
30RowTrue18302
31Ply시트True8312
32XLM CellXLM 셀True12322
33Document문서True9332
34Desktop바탕 화면True6342
35Nondefault Drag and Drop끌어서 놓기 기본값 사용 안 함True11352
36AutoFill자동 채우기True11362
37Button단추True12372
38Dialog대화 상자True3382
39Series연속 데이터True5392
40Plot Area그림 영역True8402
41Floor and Walls밑면 및 옆면True3412
42Trendline추세선True2422
43Chart차트True2432
44Format Data Series데이터 계열 서식True6442
45Format Axis축 서식True4452
46Format Legend Entry범례 항목 서식True4462
47Formula Bar수식 입력줄True9472
48PivotTable Context Menu피벗 테이블 상황에 맞는 메뉴True13482
49Query쿼리True15492
50Query Layout쿼리 레이아웃True22502
51AutoCalculate자동 계산True7512
52Object/Plot개체/그림True14522
53Title Bar (Charting)제목 표시줄(차트)True3532
54Layout레이아웃True17542
55Pivot Chart Popup피벗 차트 팝업True7552
56Phonetic Information윗주 정보True4562
57Shadow Settings그림자 설정True6570
583-D Settings3차원 설정True10580
59Borders테두리True2590
60Chart Type차트 종류True1600
61Pattern무늬True4610
62Font Color글꼴 색True3620
63Fill Color채우기 색True7630
64Line Color선 색True7640
65Order순서True4650
66Nudge조금 이동True4660
67Align or Distribute맞춤/배분True11670
68Rotate or Flip회전 또는 대칭True5680
69LinesTrue6690
70Connectors연결선True9700
71AutoShapes도형True8710
72Callouts설명선True20720
73Flowchart순서도True28730
74Block Arrows블록 화살표True28740
75Stars & Banners별 및 현수막True16750
76Basic Shapes기본 도형True32760
77Shapes도형True15772
78Inactive Chart비활성 차트True9782
79Excel ControlExcel 컨트롤True8792
80Curve곡선True18802
81Curve Node곡선의 결절점True15812
82Curve Segment곡선 세그먼트True13822
83Pictures Context Menu그림 상황에 맞는 메뉴True12832
84OLE ObjectOLE 개체True9842
85ActiveX ControlActiveX 컨트롤True9852
86WordArt Context MenuWordArt 상황에 맞는 메뉴True14862
87Rotate Mode회전 모드True6872
88Connector연결선True14882
89Script Anchor Popup스크립트 앵커 팝업True4892
90MatrixMatrixFalse3900
91PivotTable Field List피벗 테이블 필드 목록True1910
92Watch Window조사식 창True1920
93Borders테두리True4930
94Protection보호True5940
95Text To Speech텍스트 읽어주기True5950
96List목록True11960
97Compare Side by Side나란히 비교True3970
98Auto Sum자동 합계True6982
99Paste Special Dropdown선택하여 붙여넣기 드롭 다운True6992
100Find Format서식 찾기True31002
101Replace Format서식 바꾸기True31012
102List Range Popup목록 범위 팝업True201022
103List Range Layout Popup목록 범위 레이아웃 팝업True211032
104XML Range PopupXML 범위 팝업True191042
105List Range Layout Popup목록 범위 레이아웃 팝업True191052
106Drawing Canvas그리기 캔버스True31060
107Organization Chart조직도True51070
108Diagram다이어그램True71080
109Ink Drawing and Writing잉크 그리기 및 쓰기True61090
110Ink Annotations잉크 주석True71100
111Borders테두리True11110
112Draw Border테두리 그리기True21120
113Drawing and Writing Pens그리기 및 쓰기 펜True121130
114Annotation Pens주석 펜True121140
115Drawing and Writing Pens그리기 및 쓰기 펜True91150
116Annotation Pens주석 펜True91160
117Insert Shape도형 삽입True31170
118Canvas PopupCanvas PopupTrue121182
119Organization Chart PopupOrganization Chart PopupTrue91192
120Diagram다이어그램True51202
121Layout레이아웃True51212
122Select선택True41222
123MSN Money Stock QuotesMSN Money Stock QuotesFalse51230
124Task Pane작업창True11240
125 True01250
126Add Command명령 추가True151262
127Built-in Menus기본 제공 메뉴True461272
128Clipboard클립보드True01280
129Envelope봉투True11290
130Online Meeting온라인 모임True71300


아마도 어떤분은 나이도 많이 먹은 우노가 눈도 안아픈가??
위와 같은 표를 어떻게 일일이 만들었을까??눈이 빠졌겠다!!
천만의 말씀이다..엑셀은 떡사먹으려고 하는것이 아니다
아래와 같이 엑셀에서 프로시져를 돌리면 HTML에 필요한 테이블과 내용이
순간에 그려 진다(물론 HTML문을 이해하여야겠지)
그리고 웹지식을 요리조리 가미하면 된다
결국은 컴퓨터 프로그래밍은 몇가지 단어들을 이해하고 요리 조리
조합해서 활용하면 되는것이다
에이~!@#여보슈..말이 쉽지..!!!라고 하려나??!!

Sub commandbarListingHTML()
Dim oCmdBar As CommandBar
Dim shtX As Worksheet, iX As Integer
Dim sX As String
Set shtX = Worksheets.Add
sX = "<TABLE><TR>"
sX = sX & "<TD>No</TD>"
sX = sX & "<TD>Name</TD>"
sX = sX & "<TD>NameLocal</TD>"
sX = sX & "<TD>BuiltIn</TD>"
sX = sX & "<TD>Controls.Count</TD>"
sX = sX & "<TD>Index</TD>"
sX = sX & "<TD>Type</TD></TR>"
For Each oCmdBar In Application.CommandBars
        iX = iX + 1
        sX = sX & "<TR>"
        sX = sX & "<TD>" & iX & "</TD>"
        sX = sX & "<TD>" & oCmdBar.Name & "</TD>"
        sX = sX & "<TD>" & oCmdBar.NameLocal & "</TD>"
        sX = sX & "<TD>" & oCmdBar.BuiltIn & "</TD>"
        sX = sX & "<TD>" & oCmdBar.Controls.Count & "</TD>"
        sX = sX & "<TD>" & oCmdBar.Index & "</TD>"
        sX = sX & "<TD>" & oCmdBar.Type & "</TD>"
        sX = sX & "</TR>"
Next
sX = sX & "</TABLE>"
shtX.Range("A1") = sX
End Sub

실행하면 Range("A1") 셀에 HTML문으로 테이블을 구성하는 문자열정보가
만들어지고 이것을 복사하여 웹문서에 붙여주면 끝!

각자 복사하여 실행시켜보시고
위의 테이블에서 BuiltIn속성에서 False값으로 된것이 2개가 있다
이것은 엑셀이 내장(Built-In)하고 있는 것이 아니고
사용자정의명령줄((User Defined CommandBar)이다
즉 앞으로 여러분들이 만들어서 사용하게될 명령줄도 포함되는것이다
사용하다 보면 쓸데 없는 것이 만들어진 채로 쓰레기 같이 존재하고 있으니
위와 같이 실행하고 False값이 나오는 것은 검토하고 없애 버리는것이
효율적인 엑셀의 자원관리가 되는셈이다
Controls.count는 해당 CommandBar오브젝트가 갖고 있는 콘트롤의 갯수를
알려준다
CommandBar Type은 모두 3가지 타입이 있다

Constant-ValueConstant 
0msoBarTypeNormalTool Bar타입
1msoBarTypeMenuBarMenu Bar 타입
2msoBarTypePopupPopUp Bar 타입


PopUp Bar타입은 오른쪽마우스크릭을 통한 단축메뉴(ShortCut Menu)나
Menu Bar타입에서 DropDown으로 열리는 메뉴들을 말한다

명령줄을 새로만들거나 기존의 명령줄을 수정하거나..

다른 집합체(Collection)오브젝트와 마찬가지로 새롭게 만들어 내거나
삭제하거나 수정할수 있다
그러나 내장된 명령줄은 삭제할수 없다
내장된 명령줄은 눈에 보이지 않게 숨어있을뿐 삭제된것은 아니므로
명령줄이 눈에 보이지 않는다고 걱정할 필요는 하나도 없다

아래는 갖고 있는 콘트롤없이 CommandBar(명령줄)만 추가 시켜본다

Application.CommandBars.AddDim oX As CommandBar
Set oX=Application.CommandBars.Add
oX.Name="newBar"


위와 같이 빈탕의 CommandBar오브젝트는 말짱 아무일도 못한다
명령을 수행할수 있는 Control들이 CommandBar오브젝트의 자식들로 추가
되어야 한다

또한 기존의 CommandBar에 콘트롤을 추가한다면 아래와 같이 될것이다

Dim oCtl As CommandBarPopup
Set oCtl = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup)
oMenuCtl.Caption = "TEST"



기존 명령줄에 만들어진 사용자정의 콘트롤을 없애고 싶으면

Application.CommandBars(1).Reset

Reset메소드를 사용하면 된다

아래의 화일을 실행해보자
화일의 내용은..

  • Application.CommandBars집합체의 모든 CommandBar를 시트에 리스팅한다
  • 각각의 리스트에 버튼을 만든다
  • 버튼을 실행하면 해당 CommandBar가 잠시 눈에 나타나고 사라진다
  • Popup명령줄과 Button명령줄과 Menu명령줄을
    눈에 보이게 할때 Popup과 Visible의 차이
  • 다른 프로그램(웹)을 위한 문자열정보를 만드는 요령
  • 반복되는 문자열 가공 작업을 보면
    엑셀은 시간을 투자해도 절대 손해가 아니라는것!!


List Commandbar And See Which Is Which