Comment ajouter un onglet ruban personnalisé en utilisant VBA?

je cherche un moyen d'ajouter un onglet personnalisé dans le ruban Excel qui porterait quelques boutons. J'ai balancé sur certaines ressources de l'adresser via Google, mais tous semblent douteux et outrageusement compliqué.

Qu'est-ce qu'un moyen simple et rapide pour faire cela ? J'aimerais que le nouvel onglet soit chargé quand mon VBA sera chargé dans Excel..

mise à JOUR : J'ai essayé cet exemple de ici , mais un "objet obligatoire "erreur sur la dernière instruction:

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
80
demandé sur ashleedawg 2012-01-13 16:49:54

5 réponses

AFAIK vous ne pouvez pas utiliser VBA Excel pour créer l'onglet personnalisé dans le ruban Excel. Vous pouvez cependant masquer / rendre visible un composant de ruban en utilisant VBA. En outre, le lien que vous avez mentionné ci-dessus est pour MS Project et non MS Excel.

je crée des onglets pour mes applications/Add-Ins Excel en utilisant cet utilitaire gratuit appelé Custom UI Editor .


Modifier: pour accommoder la nouvelle demande de L'OP

Tutoriel

voici un petit tutoriel comme promis:

  1. après avoir installé le Custom UI Editor (CUIE), ouvrez-le et cliquez sur Fichier | Ouvrir et sélectionnez le fichier Excel correspondant. Veuillez vous assurer que le fichier Excel est fermé avant de l'ouvrir via CUIE. J'utilise une nouvelle feuille de travail comme exemple.

    enter image description here

  2. faites un clic droit sur l'image ci-dessous et cliquez sur "Office 2007 Custom UI Part". Il insérera le " customUI.xml"

    enter image description here

  3. suivant cliquez sur Insert menu / exemple XML / onglet Personnalisé. Vous remarquerez que le code de base est généré automatiquement. Vous êtes maintenant prêt à l'éditer selon vos exigences.

    enter image description here

  4. vérifions le code

    enter image description here

    label="Custom Tab" : Remplacer "Onglet Personnalisé" avec le nom que vous voulez donner à votre onglet. Pour l'instant, appelons-le "Jérôme".

    la partie ci-dessous ajoute un bouton personnalisé.

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

    imageMso : c'est l'image qui s'affichera sur le bouton. "HappyFace" est ce que vous verrez à la moment. vous pouvez télécharger plus D'image ici .

    onAction="Callback" : "Rappel" est le nom de la procédure qui s'exécute lorsque vous cliquez sur le bouton.

Démo

avec ça, créons 2 boutons et appelons-les" Bouton JG 1 "et"bouton JG 2". Gardons happy face à l'image du premier et gardons le "soleil" pour le second. Le code amendé ressemble maintenant à ceci:

<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>

supprimer tout le code généré dans CUIE et coller le code ci-dessus à la place de cela. Enregistrer et fermer CUIE. Maintenant, lorsque vous ouvrez le fichier Excel, il ressemblera à ceci:

enter image description here

maintenant le code. Ouvrir L'éditeur VBA, insérer un module, et coller ce code:

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

Enregistrer le fichier Excel comme un fichier macro activé. Maintenant, quand vous cliquez sur le Smiley ou le Soleil, vous verrez le message correspondant à cocher:

enter image description here

Espérons que cette aide!

127
répondu Siddharth Rout 2014-03-24 19:36:16

j'ai pu accomplir ceci avec VBA dans Excel 2013. Pas besoin d'éditeurs Spéciaux. Tout ce dont vous avez besoin est le Visual Basic code editor qui peut être consulté dans L'onglet Developer. L'onglet Developer n'est pas visible par défaut, il doit donc être activé dans File>Options>Customize Ribbon. Dans L'onglet Développeur, cliquez sur le bouton Visual Basic. L'éditeur de code s'ouvre. Cliquez avec le bouton droit de la souris dans le volet de L'Explorateur de projet à gauche. Cliquez sur le menu insert et choisissez module. Ajouter les deux sous-titres ci-dessous au nouveau 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

Appel LoadCustRibbon sub dans le Wookbook ouverte et appel le ClearCustRibbon sub dans le Before_Close Cas de le ThisWorkbook fichier de code.

25
répondu Roi-Kyi Bryant 2015-12-04 01:02:07

j'ai lutté comme un fou, mais c'est effectivement la bonne réponse. Pour ce qu'il vaut, ce que j'ai manqué était:

  1. comme d'autres disent, on ne peut pas créer le ruban CustomUI avec VBA, cependant , vous n'avez pas besoin de!
  2. l'idée est que vous créez votre code de ruban xml en utilisant le fichier Excel > Options > personnalisez le ruban, puis exportez le ruban vers un .fichier customUI (c'est juste un fichier txt, avec xml dedans)
  3. vient maintenant l'astuce : vous pouvez inclure le .code personnalisé dans votre .XLSM fichier en utilisant L'outil MS ils se réfèrent ici, en copiant le code de la .fichier personnalisé
  4. une Fois qu'il est inclus dans le .fichier xlsm, chaque fois que vous l'ouvrez, le ruban que vous avez défini est a ajouté au ruban de l'utilisateur - mais utilisez < ribbon startFromScratch=" false " > ou vous perdez le reste du ruban. À la sortie-ing de l' classeur, le ruban est supprimé.
  5. a Partir de là c'est simple, créez votre ruban, copiez le code xml qui est spécifique à votre ruban de l' .customUI fichier, et le placer dans un emballage comme indiqué ci-dessus (...< tabs> xml < /onglets...)

d'ailleurs la page qui l'explique sur le site de Ron est maintenant à http://www.rondebruin.nl/win/s2/win002.htm

et voici son exemple sur la façon dont vous activez /désactiver les boutons sur le Ruban http://www.rondebruin.nl/win/s2/win013.htm

Pour d'autres exemples xml de rubans, voir également http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx

18
répondu Jan Wijninckx 2014-03-20 08:16:20

les réponses ici sont spécifiques à l'utilisation de l'éditeur D'UI personnalisé. J'ai passé du temps à créer l'interface sans ce merveilleux programme, donc je documente la solution ici pour aider n'importe qui d'autre à décider s'ils ont besoin de cet éditeur D'interface personnalisé ou non.

je suis tombé sur la page Web suivante de microsoft help - https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Cela montre comment configurer l'interface manuellement, mais j'ai eu quelques problème en pointant vers mon code d'ajout personnalisé.

pour obtenir les boutons pour fonctionner avec vos macros personnalisées, configurer la macro dans votre .subs xlam à appeler comme décrit dans cette réponse - appelant une macro excel à partir du ruban . En gros, vous devrez ajouter ce paramètre "control As IRibbonControl" à n'importe quel module pointé à partir de votre XML ribbon. En outre, votre XML de ruban devrait avoir l'onAction= " myaddin!mymodule.syntaxe mysub " pour appeler correctement n'importe quel les modules chargés par le ajouter.

grâce à ces instructions, j'ai pu créer un add in (.XLAM file) qui a un onglet personnalisé chargé lorsque mon VBA est chargé dans Excel avec l'add in. Les boutons d'exécuter du code à partir de l'ajouter et l'onglet personnalisé désinstalle quand j'ai supprimer le complément.

15
répondu Jomtung 2017-05-23 10:31:16

en plus de la réponse de Roi-Kyi Bryant, ce code fonctionne entièrement dans Excel 2010. Appuyez sur ALT + F11 et VBA editor apparaîtra. Double cliquer sur ThisWorkbook sur le côté gauche, puis coller ce code:

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

n'oubliez pas de sauvegarder et de rouvrir le classeur. Espérons que cette aide!

6
répondu Erikas 2016-07-01 06:33:32