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

CommandBar|Range|SelectionChange|CurrentRegion|ToolTipText|FaceId|Parent|
|Paramenter|Controls.Add|CommandBars.Add|AddItem|
|Collection|ScreenUpdating|Offset|Resize|EnableEvents|IIf()|
|Sort|List|ListIndex|AutoFilter|AutoFilterMode|
|ActiveWindow.SplitRow|ActiveWindow.ScrollRow|
|ActiveWindow.FreezePanes|CommandBarComboBox|
|CommandBarPopUp|Controls|Index|OnAction|
|ActionControl.Parent|CommandBarButton|Protection|

앞에서 Range오브젝트에 관하여 주로 어떻게 접근하느냐를
이야기했었다
이제 부터 다른 오브젝트와 더불어 Range오브젝트에 일을 시키는
작업들을 해보도록 한다
Range.AutoFilter
라는 Range오브젝트의 자동휠터(AutoFilter)메소드가 활용된다
또한
Range.Sort
와 같이 Range오브젝트에게 정렬을 하라고 명령하면..Sort메소드
원하는대로 정렬과 휠터작업등을 수행하게 된다

기존의 콘트롤을 찾아서 사용자정의 명령줄에 삽입

엑셀에서 이미 제공되는 콘트롤을 사용자정의 명령줄에 넣어서 사용한다
아래의 그림과 같이 만들어 보면서 앞에서 나왔던것을 몇가지
응용해보도록 하고 Range오브젝트의 휠터링과 정렬기능을
적용해보자



이미 앞에서 이야기되었던 많은 기능들의 조합응용이다
아래에 열거한 내용을 생각해 본후 화일을 열어 보는 것이
실력향상에 도움이 될것이다

  • 데이타 테이블을 선택할때 명령줄이 만들어 지고
    데이타 테이블외의 범위를 선택하면 명령줄이 사라지게 하고 싶다
  • 데이타테이블에서만 적용되는 명령줄을 만들고 싶은 것이다
  • 그러면 어떤 도구를 사용하는것이 좋을까??어떤 이벤트프로시져??
  • 선택한 셀이 테이블내에 있는지 아닌지 어떤 메소드로 알아 낼수 있을까?
  • 명령줄이 사라지게 할때..Visible속성을 쓸까..Delete메소드를 쓸까??
    경우에 따라서 틀리겠지!!
  • 명령줄이 사라질때 창고정틀의 위치를 바뀌게 하려면
    어떤 속성을 쓸까??어떤 메소드를 쓸까?
  • 엑셀에서 제공하는 셀의 바탕과 문자를 서식하는 콘트롤을
  • 어떻게 찾아서 사용자정의 명령줄에 넣어 줄까?
  • 서식범위를 모두 유효하게 선택했을때만
    서식버튼이 나타나게 하고 아니면 보이지 않게 하고 싶다
    유효한 범위에 서식을 할수 없게 하고 싶은것이다
  • 콤보상자같이 생긴 콘트롤은 어떤 타입의 콘트롤인가??
  • 콤보상자같이 생긴 콘트롤에 제품분류리스트를 채워 넣어야 하는데
    중복되지 않는 제품분류명을 어떤 방벙으로 얻어 낼수 있을까?
  • 콤보콘트롤의 분류명칭명을 선택하였을때
    어떤 분류명칭을 선택하였는지 어떻게 알아낼까?
  • 데이타테이블의 휠터와 정렬은 어떤 메소드?


Use ComboType Control

모든 명령줄을 없애고 싶다

워크시트상에서 모든 명령줄은
CommandBars(이름 혹은 인덱스).Visible=False라고 하면
사라진다
그러나 워크시트상의 기본메뉴줄인
CommandBars(1) 혹은
CommandBars("Worksheet Menu Bar")는
Visible속성을 False로 하면 에러가 난다
엑셀은 기본적으로 이 명령줄만은 유지하려고 한다
만약 아래와 같이

Dim oBar As CommandBar
For Each oBar In CommandBars
    oBar.Visible=False
Next

라고 하면 에러가 나게 되는것이다
첫번째기본명령줄에서 Visible속성이 먹히지 않는것이다
아래와 같이 하면 된다

Sub RemoveAllBars()     [Show]
Dim oBar As CommandBar
For Each oBar In CommandBars
    If oBar.Enabled And oBar.Type=msoBarTypeNormal Then
         oBar.Visible=False
    End If
Next
CommandBars("WorkSheet Menu Bar").Enabled=False
End Sub



다시 기본메뉴줄과 기본명령버튼줄과 기본서식명령줄을 나타나게
아래와 같이 하면 될것이다

Sub ReCoverAllBars()     [Show]
CommandBars("Worksheet Menu Bar").Enabled = True
CommandBars("Standard").Visible = True
CommandBars("Formatting").Visible = True
End Sub



위와 같이 Visible속성대신에 Enabled속성을 사용하면 된다

또한 명령줄의 Enabled속성이 False로 되어있다면
명령줄의 Visible=True를 할수 없다
Visible속성전에 Enabled속성이 True가 되어야 하는것이다

commandbars("Standard").enabled=False
commandbars("Standard").visible=True

라고 하면 나타나지 않는다 반드시

commandbars("Standard").enabled=True
commandbars("Standard").visible=True

라고 Enabled속성을 True가 된 상태여야만 Visible속성이 말을 듣는다

명령줄을 보호모드로 하면 사용자가 명령줄을 편집할수 없다

보기/도구모음/사용자지정 메뉴를 통하여
명령줄은 사용자가 메뉴를 통하여 마음대로 위치를 바꾸기도 하고
명령줄중의 콘트롤을 추가도 하고 감추기도 하고 편집 할수 있다
그런데 개발자의 입장에서 꼭 필요한 메뉴인데 사용자가 이리저리
메뉴를 변동시키면 개발자가 설계한 기능이 망가질수도 있을것이다
메뉴를 절대 손대지 못하게 하는 속성을 사용하면 된다
CommandBar오브젝트의 Protection속성을 사용하면 된다

Sub ProtectBar()
CommandBars("Standard").Protection = _
            msoBarNoChangeDock + _
            msoBarNoCustomize + _
            msoBarNoResize + _
            msoBarNoMove
End Sub                                       

와 같이 하면 표준버튼메뉴줄을 편집할수 없게 강제하게 된다
이것을 다시 편집할수 있는 원상복귀 하려면

Sub UnProtectBar()
CommandBars("Standard").Protection=msoBarNoProtection
End Sub

와 같이 하면 된다

Protect And UnProtect CommandBar