Programming/VBA(Excel)

엑셀 리본바의 버튼 컨트롤 상태(Pressed, Visible) 관리하기

juhpark 2024. 4. 10. 15:51

엑셀 리본바의 컨트롤(버튼, 토글버튼 등)의 상태를 관리하는 방법을 설명한다. 즉, 토글버튼이 눌려져 있게 하거나 보이지 않게 한다거나 여러가지 상태를 관리하는 방법이다.

기본적으로 custom IRibbonUI의 작성은 customUI.xml 파일의 작성을 통해 만들 수 있다. 아래 글을 참조해서 엑셀 상단에 나만의 리본바를 추가할 수 있다.

 

엑셀의 리본바를 마음대로 변경해 보자

어떤 엑셀 프로그램은 기본 리본바가 아닌 다양한 형태의 리본바를 가지고 있는 엑셀파일들이 존재한다. 사용자리본정의를 통해 만들어진 것은 모든 엑셀파일을 열때 동일하게 적용이 되는데,

juhpark.tistory.com

 

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="XLGanttTab" label="ExcelGantt" 
           insertBeforeMso="TabHome">         
  	    <group id="customGroup1" label="오늘날짜선">
          <toggleButton id="Btn1" 
                label="Show Line" 
                size="normal" 
                getPressed="Btn1_onGetPressed" 
                onAction="showLine" 
                imageMso="OutlineExpandAll" />	
          <button id="Btn2"        
                label="Scroll Today" 
                size="normal"
                getVisible="Btn2_onGetVisible" 
                onAction="scrollToday" 
                imageMso="WindowSideBySideSynchronousScrolling"/>          
        </group>                  
      </tab>
    </tabs>
  </ribbon>
</customUI>

위와 같은 리본바를 만들었다고 가정했을 때, 

토글버튼의 눌려진 상태 관리

토글버튼의 눌려진 상태 관리를 위해서는 getPressed 이벤트를 사용하여 관리한다.  위 customUI.xml 파일에 getPressed 이벤트와 함수명을 입력하고 아래의 코드와 같이 이벤트를 받는 함수를 만들고  ReturnedValue  에 조건에 따라 원하는 상태값( True, Falue)을 입력하면, 눌려진 상태를 관리할 수 있다.

Sub Btn1_onGetPressed(ByRef control As Office.IRibbonControl, 
		ByRef ReturnedValue As Variant)
        
    If Sheets("option").Range("B3").value = 1 Then
        ReturnedValue = True
    Else
        ReturnedValue = False
    End If

End Sub

 

IRibbonControl 객체의 Visible 상태 관리

버튼, 토글버튼 등 IRibbonControl 객체의 Visible 상태를 관리하기 위해서는  getVisible 이벤트를 사용하여 관리한다. 위 customUI.xml 파일에 getVisible 이벤트와 함수명을 입력하고 아래의 코드와 같이 이벤트를 받는 함수를 만들고 ReturnedValu 에 조건에 따라 원하는 상태값(True, False)을 입력하면, Visible 상태를 관리할 수 있다.

Sub Btn1_onGetVisible(ByRef control As Office.IRibbonControl, 
		ByRef ReturnedValue As Variant)
        
    If Sheets("option").Range("B3").value = 1 Then
        ReturnedValue = True
    Else
        ReturnedValue = False
    End If

End Sub