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

CommandBar|CommandBarControl|ID|Type|Name|OnAction|
|OLEObject|OLEObjects|Object|Value|Enabled|
|CheckBox|OptionButton|CommandBars|Controls|
|Reset|CommandBarPopUp|CommandBarCombo|

CommandBarControl오브젝트

CommandBar오브젝트에 CommandBarControl오브젝트가 없다면
아무짝에도 쓸모 없는 껍데기일 뿐이다

Dim oCommandBar As CommandBar
Dim oCtl As CommandBarControl
Dim iX As Integer
Worksheets.Add
Range("A1:C1") = Array("Caption", _
"ID","Type") For Each oCtl In Application _
.CommandBars(1).Controls With Range("A2") .Offset(iX, 0) = oCtl.Caption .Offset(iX, 1) = oCtl.ID .Offset(iX,2)=oCtl.Type End With iX = iX + 1 Next
과 같이 실행하면 오른쪽과 같이 된다
마지막의 TEST라고 하는것은 내장된 콘트롤이
아니고 만들어 넣은것이다


CommandBar오브젝트에서도 타입이 있었듯이 CommandBarControl도
Type속성이 있다..아주 중요한 부분이다
ID속성 또한 아주 중요한 역할을 한다는 점,앞으로 진행하면서
알게 된다

CommandBarControl오브젝트의 Enabled속성과 Visible속성


Application.CommandBars(1) 즉 CommandBar오브젝트를 구성하는
각각의 콘트롤,CommandBarControl의 Visible속성과 Enabled속성을 아래와 같이
시뮤레이션을 만들어 보도록 하자



시뮤레이션을 만들어 보면서

  • CommandBar(메뉴줄)오브젝트인 CommandBarControl의 속성을 알아보고
  • 특히 중요한 Visible,Enabled속성을 적용해본다
  • UserForm용 콘트롤의 CheckBox,OptionButton콘트롤의 유용한 활용
  • UserForm에서 제공하는 콘트롤은 OLEObject 오브젝트이고
  • OLEObject오브젝트는 OLEObjects집합체의 관리하에 존재한다
  • 다른 사람이 메뉴줄을 엉망으로 만들어 놓아도
  • Application.CommandBars.Reset메소드만 알면 원상복귀된다


Enabled And Visible Of CommandBarControl

CommandBarControl오브젝트도 여러가지 Type이 있다

CommandBar(명령줄)오브젝트에도 여러 타입이 있듯이
CommandBar오브젝트를 구성하는 구성요소인 콘트롤(CommandBarControl)에도
여러가지 타입이 있고 Type속성으로 지정한다

아래의 그림은 개체창에서 찾아본 콘트롤의 Type표이다
물론 Type은 Long값이고 상수로 아래와 같이 표현하는 것이다
초보님들은 ..숫자로 하지 않고 왜 상수가 필요할까..하겠지만
1이라는 숫자는 사용자에게는 의미가 무엇인지 헷갈린다
그래서 의미있는 단어로 상수를 만들어 표현하는 것이다



메뉴에서 대표적인 유형으로 사용되는 콘트롤이

CommandBarButton
msoControlButton
CommandBarPopup
msoControlPopup, msoControlGraphicPopup, msoControlButtonPopup,
msoControlSplitButtonPopup, or msoControlSplitButtonMRUPopup
CommandBarCombo
msoControlEdit, msoControlDropdown, msoControlComboBox,
msoControlButtonDropdown,msoControlSplitDropdown,
msoControlOCXDropdown, msoControlGraphicCombo,
msoControlGraphicDropdown

위와 같이 3가지로 대별되고
아래와 같이 변수선언을 하여 사용할수 있다

Dim oX As CommandBarButton
Dim oY As CommandBarComboBox
Dim oZ As CommandBarPopUp

혹은 위와 같이 특정하게 3가지로 나누지 않고 범용으로
Dim oX As CommandBarControl
혹은
Dim oX As Object
혹은
Dim oX As Variant
와 같이 할수도 있다..아무튼 콘트롤을 대표할수 있는
Dim oX As CommandBarControl

를 사용하면 덜 골치아플것이다
다시 한번 무슨말인가하면..
Application.CommandBars(1)은 엑셀의 기본메뉴줄오브젝트이고
Application.CommandBars(1).Controls(1)은 기본메뉴줄의 첫번째 콘트롤인
파일(F)이다 이것의 콘트롤타입은
Application.CommandBars(1).Controls(1).Type값은 10으로서
상수로는 msoControlPopUp이다..즉 CommandBarPopUp오브젝트로 분류가 되는것이다
그래서 아래와 같이 할수 있다

Sub Test()
Dim oCtl As CommandBarControl
Set oCtl = Application.CommandBars(1).Controls(1)
MsgBox oCtl.Type
End Sub

로 해도 되고

Sub Test()
Dim oCtl As CommandBarPopUp
Set oCtl = Application.CommandBars(1).Controls(1)
MsgBox oCtl.Type
End Sub

로 해도 되는것이다
그러나 만약 이렇게 하면 에러가 퍽!!날것이다

Sub Test()
Dim oCtl As CommandBarButton
Set oCtl = Application.CommandBars(1).Controls(1)
MsgBox oCtl.Type
End Sub

왜 이렇게 복잡하게 까다롭게 해놓았을까??
아무튼 섬세하게 만든다고 만들어 놓았는데 헷갈리기 짝이 없다
예를 들어서 Style속성같은것은 CommandBarButton오브젝트만 적용되지
CommandBarPopUp이나 CommandBarCombo같은 오브젝트는 해당없음으로 에러가 나게 된다
다음 페이지에서 좀더 자세하게 따져 나가보자!!