일반 프로시저를 만들어 두고 공통으로 사용하기 위해서 인수를 사용한 다음
필요에 따라 인수를 이용하여 동작 방식을 변경하는 것을 할 수 있습니다.
그런데, Ribbon Menu에서 CallBack 함수를 호출할 때 인수를 어떻게 전달할까요?
예전에는 아래처럼 Ribbon Menu에서 각각 별도로 호출을 하고,
CallBack 함수에서 공통 프로시저에 인수를 넣어 호출하는 방식을 사용했습니다.
Ribbon Menu의 XML 부분
<splitButton id="sbtVisiblePaste" size="large">
<button id="btVisiblePaste" label="보이는 셀 붙여넣기" imageMso="Paste" onAction="rbnPasteVisibleAll" supertip="보이는 셀에만 붙여넣기 합니다." />
<menu id="mnVisiblePaste" label="보이는 셀 붙여넣기" imageMso="Paste" itemSize="large" >
<button id="sbm121" label="모두 붙여넣기" imageMso="Paste" onAction="rbnPasteVisibleAll" />
<button id="sbm122" label="값만 붙여넣기" imageMso="PasteValues" onAction="rbnPasteVisibleValues" />
<button id="sbm123" label="수식 붙여넣기" imageMso="PasteFormulas" onAction="rbnPasteVisibleFormulas" />
</menu>
</splitButton>
CallBack 함수 부분
Public Sub rbnPasteVisibleAll(control As IRibbonControl) ' 보이는 셀에 복사
PasteToVisibleCells xlPasteAll
End Sub
Public Sub rbnPasteVisibleValues(control As IRibbonControl) ' 보이는 셀에 값 복사
PasteToVisibleCells xlPasteValues
End Sub
Public Sub rbnPasteVisibleFormulas(control As IRibbonControl) ' 보이는 셀에 수식 복사
PasteToVisibleCells xlPasteFormulas
End Sub
Sub PasteToVisibleCells(Optional argPasteType As Variant = xlPasteAll)
'// 실행 코드
End Sub
이번에 많은 사용자 정의 함수(UDF)를 "함수 마법사"를 이용하여 공통으로 처리하는 방법에는
아래와 같이 Ribbon XML의 tag를 이용하여 공통으로 하나의 CallBack함수만 사용하는 방법을 사용했습니다.
Ribbon Menu의 XML 부분
<menu id="mnEGF1" label="EG-검색함수" >
<button id="EGF1_1" onAction="rbnFunctionWizard" label="iLOOKUP" tag="iLOOKUP" screentip="찾는 범위에서 찾는 값의 지정하는 순번의 그림을 가져옴" />
<button id="EGF1_2" onAction="rbnFunctionWizard" label="nLOOKUP" tag="nLOOKUP" screentip="찾는 범위에서 찾는 값의 지정하는 순번을 찾음" />
<button id="EGF1_3" onAction="rbnFunctionWizard" label="MatchJoin" tag="MatchJoin" screentip="찾는 값이나 조건에 해당하는 내용을 연결 문자를 이용하여 연결" />
<button id="EGF1_4" onAction="rbnFunctionWizard" label="CompareList" tag="CompareList" screentip="2개의 범위나 목록을 비교하여 결과값을 반환함" />
<button id="EGF1_5" onAction="rbnFunctionWizard" label="FindFirstData" tag="FindFirstData" screentip="지정범위내 첫번째로 자료가 입력된 Cell 찾기" />
<button id="EGF1_6" onAction="rbnFunctionWizard" label="FindLastData" tag="FindLastData" screentip="지정범위내 마지막으로 자료가 입력된 Cell 찾기" />
<button id="EGF1_7" onAction="rbnFunctionWizard" label="FindIncluded" tag="FindIncluded" screentip="찾는 문자열 전체가 들어있는 첫번째 Cell을 찾음" />
<button id="EGF1_8" onAction="rbnFunctionWizard" label="FindSubstring" tag="FindSubstring" screentip="문자열의 일부분이 들어있는 첫번째 Cell을 찾음" />
</menu>
CallBack 함수 부분
'// 아래 2개는 리본메뉴 함수명 버튼으로 함수명이 있는 tag를 이용해 함수마법사를 실행하는 것
Sub rbnFunctionWizard(ctrl As IRibbonControl)
Selection.Formula = "=" & ctrl.Tag & "()"
'Selection.FunctionWizard '<<- 바로 처리가 안됨, 아래처럼 시간차 간접 처리
Application.OnTime Now + TimeValue("00:00:01") / 4, "showFunctionWizard"
End Sub
Private Sub showFunctionWizard()
Selection.FunctionWizard
End Sub
이렇게 또 하나를 배우면서 버전업을 했습니다.
'Excel - VBA' 카테고리의 다른 글
IsTime() 셀 값이 시간 값인지 어떻게 확인할 수 있을까? (0) | 2023.01.11 |
---|---|
VBA로 Add-In(추가기능) 자동 업데이트 하기 (0) | 2023.01.06 |
URL을 지정하여 File을 Download하기 (0) | 2023.01.06 |
Ribbon Menu에 토글버튼 사용하기 (0) | 2023.01.06 |
UDF 함수 마법사 띄우기 (0) | 2023.01.05 |