programing

VBA를 사용하여 커스텀 리본 탭을 추가하는 방법

starjava 2023. 4. 12. 21:39
반응형

VBA를 사용하여 커스텀 리본 탭을 추가하는 방법

엑셀 리본에 커스텀탭을 추가하는 방법을 찾고 있습니다.나는 구글을 통해 그것을 다루는 몇몇 자원들을 우연히 발견했지만 모두 의심스럽고 터무니없이 복잡해 보인다.

그것을 하기 위한 빠르고 간단한 방법은 무엇입니까?VBA가 Excel에 로드될 때 새로운 탭을 로드하고 싶습니다.

UPDATE : 여기서 이 예를 시도했는데 마지막 명령에서 "object required" 오류가 나타납니다.

Public Sub AddHighlightRibbon()
Dim ribbonXml As String

ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + "  <mso:ribbon>"
ribbonXml = ribbonXml + "    <mso:qat/>"
ribbonXml = ribbonXml + "    <mso:tabs>"
ribbonXml = ribbonXml + "      <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + "        <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + "          <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + "        </mso:group>"
ribbonXml = ribbonXml + "      </mso:tab>"
ribbonXml = ribbonXml + "    </mso:tabs>"
ribbonXml = ribbonXml + "  </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"

ActiveProject.SetCustomUI (ribbonXml)
End Sub

AFAIK 엑셀을 사용하여 엑셀 리본에 커스텀 탭을 만들 수 없습니다.그러나 VBA를 사용하여 리본 구성요소를 숨기거나 표시할 수 있습니다.또한 위의 링크는 MS Excel이 아닌 MS Project용 링크입니다.

커스텀 UI 에디터라는 무료 유틸리티를 사용하여 Excel 어플리케이션/애드인 탭을 만듭니다.


편집: OP에 의한 새로운 요청에 대응합니다.

튜토리얼

다음은 약속대로 간단한 튜토리얼입니다.

  1. CUIE(Custom UI Editor)를 설치한 후 열고 [File](파일) | [Open](열기)를 클릭하여 해당 Excel 파일을 선택합니다.CUIE를 통해 Excel 파일을 열기 전에 반드시 닫으십시오. 예를 들어, 새로운 워크시트를 사용하고 있습니다.

여기에 이미지 설명 입력

  1. 아래 그림과 같이 오른쪽 버튼을 클릭하여 "Office 2007 Custom UI Part"를 클릭합니다.「커스텀」을 삽입합니다.UI.xml"

여기에 이미지 설명 입력

  1. 다음으로 메뉴 [Insert] | [ Sample XML ] | [ Custom ]탭을 클릭합니다.기본 코드가 자동으로 생성됩니다.이것으로 요건에 따라 편집할 수 있습니다.

여기에 이미지 설명 입력

  1. 코드를 검사해 봅시다.

여기에 이미지 설명 입력

label="Custom Tab": " Tab바꿉니다 커스텀 탭당분간은 '제롬'이라고 부르자.

아래 부분에는 커스텀버튼이 추가되어 있습니다.

    <button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />

`imageMso`: This is the image that will display on the button. "HappyFace" is what you will see at the moment. [You can download more image ID's here](https://www.dropbox.com/s/8mvexoalel6icix/Office2007IconsGallery.EXE?dl=0).

`onAction="Callback"`: "Callback" is the name of the procedure which runs when you click on the button.

데모

이것으로, 2개의 버튼을 작성해, 「JG 버튼 1」, 「JG 버튼 2」라고 부릅니다.첫 번째 이미지처럼 행복한 얼굴을 유지하고 두 번째 이미지 '태양'을 지키자.수정된 코드는 다음과 같습니다.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

CUIE에서 생성된 코드를 모두 삭제하고 그 대신 위의 코드를 붙여 넣습니다.CUIE를 저장하고 닫으십시오. Excel 파일을 열면 다음과 같이 나타납니다.

여기에 이미지 설명 입력

이제 코드 파트.VBA Editor를 열고 모듈을 삽입하고 다음 코드를 붙여넣습니다.

Public Sub Callback1(control As IRibbonControl)
 
    MsgBox "You pressed Happy Face"

End Sub

Public Sub Callback2(control As IRibbonControl)
 
    MsgBox "You pressed the Sun"

End Sub

Excel 파일을 매크로 지원 파일로 저장합니다.이제 Smiley 또는 Sun을 클릭하면 관련 메시지 상자가 표시됩니다.

여기에 이미지 설명 입력

Excel 2013에서 VBA를 통해 이를 달성할 수 있었습니다.특별한 편집자는 필요 없습니다.개발자 탭에서 액세스할 수 있는 Visual Basic 코드 편집기만 있으면 됩니다.디폴트로는 [Developer]탭은 표시되지 않으므로 [File]> [ Options ]> [ Customize Ribbon ]에서 활성화해야 합니다.[ Developer ]탭에서 [Visual Basic]버튼을 클릭합니다.코드 에디터가 기동합니다.왼쪽의 [Project Explorer]페인을 오른쪽 클릭합니다.삽입 메뉴를 클릭하고 module을 클릭합니다.다음 두 서브를 새 모듈에 추가합니다.

Sub LoadCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='Reports' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='PTO' "   & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='GenReport'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Sub ClearCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Wookbook의 LoadCustRibbon 서브를 호출하여 이 Workbook 코드파일의 Before_Close Event의 ClearCustRibbon 서브를 호출합니다.

나는 미친 듯이 노력했지만, 사실 이것이 정답이다.사실 제가 놓친 건 다음과 같습니다.

  1. 다른 사람들이 말하듯이 커스텀을 생성할 수 없습니다.VBA를 사용하는 UI 리본은 필요 없습니다!
  2. Excel의 [File]> [ Options ]> [ Customize Ribbon ]를 사용하여 xml 리본코드를 작성한 후 리본을 .custom으로 내보냅니다.UI 파일(xml이 포함된 txt 파일일 뿐)
  3. 여기서 요령이 나옵니다. 커스텀을 포함할 수 있습니다.여기서 말하는 MS 도구를 사용하여 .custom에서 코드를 복사하여 .xlsm 파일의 UI 코드를 사용합니다.UI 파일
  4. .xlsm 파일에 포함되면 매번 리본을 열 때마다 정의한 리본이 사용자의 리본에 추가됩니다.단, <ribon start From Scratch="false">를 사용하십시오.그렇지 않으면 나머지 리본이 손실됩니다.워크북을 종료할 때 리본이 제거됩니다.
  5. 여기서 간단하게 리본을 만들고 .custom에서 리본 고유의 xml 코드를 복사합니다.UI 파일을 위와 같이 래퍼에 넣습니다(...).< 탭> xml </tabs...)

덧붙여서, Ron의 사이트에서 설명하고 있는 페이지는, http://www.rondebruin.nl/win/s2/win002.htm 에 있습니다.

다음은 Ribbon http://www.rondebruin.nl/win/s2/win013.htm에서 버튼을 활성화/비활성화하는 방법의 예입니다.

리본의 다른 xml 예는 http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx도 참조해 주세요.

여기에 나와 있는 답변은 사용자 지정 UI 편집기를 사용하는 것에 한정됩니다.이 훌륭한 프로그램을 사용하지 않고 인터페이스를 만드는 데 시간을 소비했기 때문에, 커스텀 UI 에디터가 필요한지 아닌지를 다른 사용자가 판단할 수 있도록 솔루션을 문서화하고 있습니다.

Microsoft 도움말 웹 페이지(https://msdn.microsoft.com/en-us/library/office/ff861787.aspx)를 발견했습니다.이것은 인터페이스를 수동으로 설정하는 방법을 나타내고 있습니다만, 커스텀 애드인 코드를 가리킬 때 문제가 있었습니다.

커스텀 매크로에 대응하는 버튼을 취득하려면 , .xlam 서브내의 매크로를 「SO answer」(리본으로부터 Excel 매크로를 호출한다)의 설명에 따라서 설정합니다.기본적으로 리본 xml에서 가리키는 모든 모듈에 "control As IRibbon Control" 매개 변수를 추가해야 합니다.또한 추가 기능으로 로드된 모듈을 올바르게 호출하려면 리본 xml에 onAction="myaddin!mymodule.mysub" 구문이 있어야 합니다.

이 순서를 사용하여 엑셀에 VBA가 로드되면 커스텀 탭이 로드되는 엑셀 애드인(.xlam 파일)을 애드인과 함께 생성할 수 있었습니다.버튼은 애드인의 코드를 실행하고 애드인을 삭제하면 커스텀탭이 언인스톨 됩니다.

ROI-Kyi Bryant는 Excel 2010을 사용합니다.ALT + F11은 VBA를 사용합니다.★★를 .ThisWorkbook왼쪽에서 다음 코드를 붙여넣습니다.

Private Sub Workbook_Activate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='My Actions' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='Trim' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='TrimSelection'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Private Sub Workbook_Deactivate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

워크북을 저장하고 다시 여는 것을 잊지 마십시오.이게 도움이 됐으면 좋겠네요!

여러 애드인이 리본을 수정하려고 때 Roi-Kyi Bryant의 솔루션에 문제가 발생했습니다.또한 업무용 컴퓨터에 관리자 액세스 권한이 없기 때문에Custom UI Editor저와 같은 처지라면 Excel만을 사용하여 리본을 커스터마이즈할 수 있는 다른 예를 제시하겠습니다.참고로 이 솔루션은 Microsoft 가이드에서 파생되었습니다.


  1. 엑셀을 사용법제 경우, 두 개를 만들었습니다..xlam 파일,Chart Tools.xlam ★★★★★★★★★★★★★★★★★」Priveleged UDFs.xlam여러 애드인이 리본과 상호작용하는 방법을 보여줍니다.
  2. 방금 작성한 각 파일에 대해 폴더 이름을 사용하여 폴더를 만듭니다.
  3. 각 에 " " " " 를 합니다.customUI ★★★★★★★★★★★★★★★★★」_rels더입니니다다
  4. ★★★★★★★customUI " ", " 를 만듭니다.customUI.xmlcustomUI.xmlfile은 Excel 파일이 리본과 어떻게 상호작용하는지 자세히 설명합니다.Microsoft 가이드의 파트2에서는, 다음의 요소에 대해 설명합니다.customUI.xmlfilename을 클릭합니다.

★★★customUI.xmlChart Tools.xlam 모양입니다.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
  <ribbon>
    <tabs>
      <tab idQ="x:chartToolsTab" label="Chart Tools">
        <group id="relativeChartMovementGroup" label="Relative Chart Movement" >
            <button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
            <button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
        </group >
        <group id="chartDeletionGroup" label="Chart Deletion">
            <button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

★★★customUI.xmlPriveleged UDFs.xlam 모양입니다.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
  <ribbon>
    <tabs>
      <tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
        <group id="privelgedUDFsGroup" label="Toggle" >
            <button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
            <button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>
  1. 스텝 1에서 작성한 각 파일에 대해 서픽스 a를 붙입니다..zip파일명을 지정합니다. 경우에는 저저저저 renamed renamed renamed renamed renamed renamed in in in로 이름을 바꿨습니다.Chart Tools.xlam로로 합니다.Chart Tools.xlam.zip , , , , 입니다.Privelged UDFs.xlam로로 합니다.Priveleged UDFs.xlam.zip.
  2. ★★★★.zip후 '파일링'으로 합니다._rels베끼다.rels_rels3단계에서 작성한 폴더입니다.각각 편집 .rels텍스트 편집기를 사용하여 파일을 작성합니다.Microsoft 가이드 참조

★★★★★★★★★★★★★★★★★★★★~<Relationship> 및 클로징 " " "<Relationships>요소를 사용하여 문서 파일과 사용자 정의 파일 간의 관계를 만드는 행을 추가합니다.폴더 및 파일 이름을 올바르게 지정해야 합니다.

<Relationship Type="http://schemas.microsoft.com/office/2006/
  relationships/ui/extensibility" Target="/customUI/customUI.xml" 
  Id="customUIRelID" />

★★★.relsChart Tools.xlam 모양입니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
        <Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
    </Relationships>

★★★.relsPriveleged UDFs이렇게 생겼어요.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
        <Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
    </Relationships>
  1. 「 「 」를 교환해 ..rels 파일 내의 .zip을 하다.rels★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  2. 하여 .customUI 한 폴더.zip파일(파일)을 클릭합니다.
  3. 작성한 Excel 파일에서 파일 확장자를 제거합니다.
  4. 」를 .xlamExcel Excel.
  5. 필요에 따라서, 각 애드인에 콜백을 작성합니다.스텝 4에서는,onAction키워드를 입력합니다.onAction Excel 이 Excel의 바로 onAction키워드를 지정합니다.를 콜백이라고 합니다.인마이.xlam파일이라는 모듈을 가지고 있습니다.CallBacks콜백 서브루틴을 포함했습니다.

콜백 모듈

★★★CallBacks module module module module 、 module module 。Chart Tools.xlam가 마치

Option Explicit

Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
  MoveChartWithRelativeLinks
End Sub

Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
  MoveChartToManySheetsWithRelativeLinks
End Sub

Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
  DeleteAllChartsInWorkbookSharingAnAddress
End Sub

★★★CallBacks module module module module 、 module module 。Priveleged UDFs.xlam가 마치

명시적 옵션

Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.InitialisePrivelegedUDFs
End Sub

Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub

요소에 따라 콜백서브루틴 시그니처가 다릅니다.경우 는 ""입니다.ByRef control As IRibbonControl필요한 콜백 시그니처를 따르지 않으면 VBA 프로젝트 컴파일 중 오류가 발생합니다.Microsoft 가이드 파트3에서는 모든 콜백시그니처를 정의하고 있습니다


완성된 예는 다음과 같습니다.

완제품


클로징 힌트

  1. 요소를 을 사용하는 는, 「」idQ ★★★★★★★★★★★★★★★★★」xlmns:키워드를 지정합니다.예에서는, 「 」가 됩니다.Chart Tools.xlam ★★★★★★★★★★★★★★★★★」Priveleged UDFs.xlam둘 다 와 함께 자연에 접근할 수 있다idQ와와와 같다x:chartToolsTab ★★★★★★★★★★★★★★★★★」x:privelgedUDFsTab하기 「 」는x:입력 사항입니다. 그 의 네임스페이스의 첫에 정의했습니다.또한 첫 번째 줄에 이름 공간을 정의했습니다.customUI.xml 파일,<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">Microsoft 가이드의 「Fluent UI 를 커스터마이즈 하는 2가지 방법」섹션에서는, 상세한 것에 대해 설명합니다.
  2. Excel에된 리본 을 사용하는 Excel을 하십시오.isMSO키워드를 지정합니다.Microsoft 가이드의 「Fluent UI커스터마이즈 하는 2가지 방법」섹션에서는, 상세한 것에 대해 설명합니다.

또 다른 방법은 이 페이지에서 Jan Karel Pieterse의 무료 Open XML 클래스 모듈을 다운로드하는 것입니다.VBA를 사용하여 OpenXML 파일의 요소 편집

이것을 VBA 프로젝트에 추가하면 Excel 파일의 압축을 풀고 VBA를 사용하여 XML을 수정한 다음 클래스를 사용하여 파일을 다시 압축할 수 있습니다.

이것은 Excel 365에서 작동하는 간단한 솔루션입니다.

먼저 빈 워크북에 이 코드를 입력하십시오.

Option Explicit

Sub sbHelloWorld()
 MsgBox "Hello World!"
End Sub

이것은 기본 커스텀리본의 XML 입니다.메모장을 사용하여 이 XML을 "rb_HelloWorld.txt"라는 파일에 붙여넣은 후 저장한 후 "C:\Users\david\AppData\Local\Microsoft\Office" 이 폴더는 원래 숨겨져 있기 때문에 숨김을 해제해야 합니다.

<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>
    <mso:ribbon>
        <mso:qat/>
        <mso:tabs>
        <mso:tab idQ="mso:TabDrawInk" visible="false"/>
        <mso:tab id="mso_c1.2A492F1" label="New Tab">
            <mso:group id="mso_c2.2A492F1" label="New Group" autoScale="true">
                <mso:button id="sbHelloWorld" label="sbHelloWorld" imageMso="ListMacros" onAction="sbHelloWorld" visible="true"/>
            </mso:group>
        </mso:tab>
        </mso:tabs>
    </mso:ribbon>
</mso:customUI>

워크북이 종료될 때 새 리본을 복사하고 삭제할 때 사용하는 두 가지 루틴입니다.

Sub sbCopyFile()
 Dim sOfficeUIDir As String
 Dim sHWFile As String
 Dim sUIFile As String
 Dim sTest As String
 sOfficeUIDir = "C:\Users\david\AppData\Local\Microsoft\Office\"
 sHWFile = sOfficeUIDir & "rb_HelloWorld.txt"
 sUIFile = sOfficeUIDir & "Excel.officeUI"
 sTest = Dir(sHWFile)
 If Not sTest = "" Then
  FileCopy sHWFile, sUIFile
 End If
End Sub



Sub sbDeleteFile()
 Dim sOfficeUIDir As String
 Dim sUIFile As String
 Dim sTest As String
 sOfficeUIDir = "C:\Users\david\AppData\Local\Microsoft\Office\"
 sUIFile = sOfficeUIDir & "Excel.officeUI"
 sTest = Dir(sUIFile)
 If Not sTest = "" Then
  Kill (sUIFile)
 End If
End Sub

사용자 지정 리본은 내장 절차인 Workbook_Activate 및 Workbook_Disactivate를 사용하여 추가 및 제거할 수 있습니다.

Private Sub Workbook_Activate()
 Call sbCopyFile
End Sub

Private Sub Workbook_Deactivate()
 Call sbDeleteFile
End Sub

루틴 sbHelloWorld()는 커스텀리본의 버튼에서 호출됩니다.

언급URL : https://stackoverflow.com/questions/8850836/how-to-add-a-custom-ribbon-tab-using-vba

반응형