excel - custom ui editor
¿Cómo agregar una pestaña de Cinta personalizada usando VBA? (5)
AFAIK no puede usar VBA Excel para crear una pestaña personalizada en la cinta de Excel. Sin embargo, puede ocultar / hacer visible un componente de cinta usando VBA. Además, el enlace que mencionó anteriormente es para MS Project y no para MS Excel.
Creo pestañas para mis aplicaciones / complementos de Excel usando esta herramienta gratuita llamada Custom UI Editor .
Editar: para acomodar una nueva solicitud por OP
Tutorial
Aquí hay un breve tutorial como se prometió:
Después de haber instalado el Editor de interfaz de usuario personalizado (CUIE), ábralo y luego haga clic en Archivo | Abra y seleccione el archivo de Excel relevante. Asegúrese de que el archivo de Excel esté cerrado antes de abrirlo a través de CUIE. Estoy usando una hoja de trabajo completamente nueva como ejemplo.
Haga clic con el botón derecho como se muestra en la imagen a continuación y haga clic en "Office 2007 Custom UI Part". Insertará el "customUI.xml"
Siguiente Haga clic en el menú Insertar | Muestra XML | Pestaña personalizada Notará que el código básico se genera automáticamente. Ahora está listo para editarlo según sus requisitos.
Vamos a inspeccionar el código
label="Custom Tab"
: reemplace "Pestaña personalizada" con el nombre que desea asignar a su pestaña. Por el momento, vamos a llamarlo "Jerome".La parte de abajo agrega un botón personalizado.
<button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />
imageMso
: Esta es la imagen que se mostrará en el botón. "HappyFace" es lo que verás en este momento. Puede descargar más ID de imagen aquí .onAction="Callback"
: "Devolución de llamada" es el nombre del procedimiento que se ejecuta al hacer clic en el botón.
Manifestación
Con eso, creemos 2 botones y llámenlos "Botón JG 1" y "Botón JG 2". Mantengamos la cara feliz como la imagen de la primera y sigamos con el "Sol" por la segunda. El código enmendado ahora se ve así:
<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>
Elimine todo el código que se generó en CUIE y luego pegue el código anterior en lugar de eso. Guarde y cierre CUIE. Ahora cuando abras el archivo de Excel se verá así:
Ahora la parte del código. Abra VBA Editor, inserte un módulo y pegue este código:
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
Guarde el archivo de Excel como un archivo habilitado para macros. Ahora cuando hagas clic en Smiley o en el Sol, verás el cuadro de mensaje relevante:
¡Espero que esto ayude!
Estoy buscando una manera de agregar una pestaña personalizada en la cinta de Excel que llevaría algunos botones. Me topé con algunos recursos para abordarlo a través de Google, pero todos se ven dudosos y escandalosamente complicados.
¿Cuál es una forma rápida y sencilla de hacer eso? Me gustaría que la nueva pestaña se cargue cuando mi VBA se cargue en Excel.
ACTUALIZACIÓN : Probé este ejemplo desde here pero obtengo un error de "objeto requerido" en la última instrucción:
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
Además de la respuesta de Roi-Kyi Bryant, este código funciona completamente en Excel 2010. Presione ALT + F11 y aparecerá el editor de VBA. Haga doble clic en ThisWorkbook
en el lado izquierdo, luego pegue este código:
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
No te olvides de guardar y volver a abrir el libro de trabajo. ¡Espero que esto ayude!
Las respuestas aquí son específicas para usar el editor de interfaz de usuario personalizado. Pasé algún tiempo creando la interfaz sin ese maravilloso programa, por lo que estoy documentando la solución aquí para ayudar a los demás a decidir si necesitan o no ese editor de interfaz de usuario personalizado.
Encontré la siguiente página web de ayuda de Microsoft: https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Esto muestra cómo configurar la interfaz de forma manual, pero tuve algunos problemas al señalar mi código de complemento personalizado.
Para que los botones funcionen con sus macros personalizadas, configure la macro en sus subs .xlam para que se llame como se describe en esta respuesta SO - Llamando a una macro excel desde la cinta . Básicamente, deberá agregar ese parámetro "control As IRibbonControl" a cualquier módulo señalado desde su cinta xml. Además, su cinta XML debe tener la sintaxis onAction = "myaddin! Mymodule.mysub" para llamar correctamente a cualquier módulo cargado por el complemento.
Utilizando esas instrucciones, pude crear un complemento excel en el archivo (.xlam) que tiene una pestaña personalizada cargada cuando mi VBA se carga en Excel junto con el complemento. Los botones ejecutan código desde el complemento y la pestaña personalizada se desinstala cuando Elimino el complemento.
Luché como loco, pero esta es realmente la respuesta correcta. Por lo que vale, lo que extrañé fue esto:
- Como otros dicen, uno no puede crear la cinta CustomUI con VBA, ¡ sin embargo , no es necesario!
- La idea es que cree su código XML Ribbon utilizando el archivo de Excel> Opciones> Personalizar cinta, y luego exporte la cinta de opciones a un archivo .customUI (es solo un archivo de texto, con xml en él)
- Ahora viene el truco : puede incluir el código .UtiliceUI en su archivo .xlsm usando la herramienta MS a la que se refieren aquí, copiando el código del archivo .customUI
- Una vez que está incluido en el archivo .xlsm, cada vez que lo abre, la cinta que definió se agrega a la cinta del usuario, pero utiliza <ribbon startFromScratch = "false"> o pierde el resto de la cinta. Al salir del libro, la cinta se elimina.
- A partir de ahora es simple, cree su cinta, copie el código xml que es específico para su cinta del archivo .customUI y colóquelo en un contenedor como se muestra arriba (... <pestañas> sus xml </ pestañas). .)
Por cierto, la página que lo explica en el sitio de Ron ahora está en http://www.rondebruin.nl/win/s2/win002.htm
Y aquí está su ejemplo sobre cómo habilitar / deshabilitar botones en la cinta de opciones http://www.rondebruin.nl/win/s2/win013.htm
Para ver otros ejemplos xml de cintas, consulte también http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx
Pude lograr esto con VBA en Excel 2013. No se necesitan editores especiales. Todo lo que necesita es el editor de código de Visual Basic al que se puede acceder desde la pestaña Desarrollador. La pestaña Desarrollador no está visible de forma predeterminada, por lo que debe estar habilitada en Archivo> Opciones> Personalizar cinta. En la pestaña Desarrollador, haga clic en el botón Visual Basic. El editor de código se iniciará. Haga clic derecho en el panel Explorador de proyectos a la izquierda. Haga clic en el menú Insertar y elija módulo. Agregue ambos subs a continuación al nuevo módulo.
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
Llame al subcarpe LoadCustRibbon en el Wookbook abierto y llame al sub ClearCustRibbon en el evento Before_Close del archivo de código ThisWorkbook.