2012-10-02 52 views
5

Estoy desarrollando una extensión de cinta personalizada para Excel, en la que un control requiere diferentes imágenes personalizadas. Logré usar algunas imágenes ubicadas en mi sistema de archivos, pero me gustaría insertar estas imágenes dentro del archivo .xlsm. ¿Es posible hacerlo y hacer referencia a ellos desde el código VBA que actualiza la imagen del control?Cómo incrustar imágenes en el archivo de Office para cinta personalizada

Para propósitos de prueba, este es el XML que define mi cinta de encargo:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded"> 
    <ribbon> 
    <tabs> 
     <tab idMso="TabHome" > 
     <group id="customGroup1" label="My Group" insertAfterMso="GroupFont"> 
      <button id="customButton1" label="Click Me" size="large" onAction="Macro1" getImage="getButtonImage"/> 
     </group> 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 

Y esta es la macro que cambie la imagen del control customButton1:

Dim imgIndex As Long 

Public Sub getButtonImage(ByVal control As IRibbonControl, ByRef Image) 
Select Case control.ID 
    Case "customButton1" 
    Set Image = LoadPicture("img" + Trim(Str(imgIndex)) + ".bmp") 
    imgIndex = (imgIndex + 1) Mod 2 
    End Select 
End Sub 

He intentado añadir los archivos bmp dentro de .xlsm y hacer referencia a ellos actualizando el archivo de relaciones (.rels), pero no sé cómo hacer referencia a ellos desde VBA y, lo más importante, cuando abro el archivo con Excel y lo guardo, se eliminan automáticamente ...

¡Se agradece cualquier ayuda!

+0

¿Necesita agregar algunas imágenes una vez o necesita actualizar el archivo con nuevas imágenes varias veces? Si solo necesita agregarlos una vez que los puede agregar en el XML personalizado de UI, use el [Editor de interfaz de usuario personalizada] (http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2009/08/07/7293.aspx) Si necesita actualizarlos con frecuencia, ese método podría no funcionar tan bien. –

+0

Solo necesito agregar las imágenes una vez. El Editor de IU personalizado fue muy útil para resolver el primer problema de incrustación (de forma manual estaba haciendo referencia a las imágenes en el archivo .rels incorrecto ...). Pero, ¿cómo se puede acceder y cargar en VBA? Creo que la función LoadPicture no funciona con ellos ... –

Respuesta

1

Si la imagen está incrustada en laUI personalizada, no necesita VBA para agregarla a un control. Sólo tiene que utilizar el mismo ID de la imagen en una image etiqueta:

<button id="button1" label="Test" size="large" image="TestID" onAction="ButtonOnAction" /> 

Mi muestra se adressing la imagen con ID "testid", que debe ser encontrado en el XML customUI - expanda el nodo customUI en el Custom UI Editor encontrar o cambie la identificación de la imagen (o use el editor para agregar una nueva imagen).

+1

Gracias Olle. ¡Un paso mas cerca! Pero, ¿cómo puedo hacer si necesito cambiar dinámicamente la imagen del botón eligiendo entre todas las imágenes incrustadas? El 'getButtonImage' en mi pregunta muestra lo que quiero lograr: recorrer un conjunto de imágenes (solo 2 en el ejemplo, pero pueden ser hasta 256 ...) cada vez que el usuario haga clic en el botón. –

+1

Ah, es por eso que pregunté "una o varias veces" en el comentario a su pregunta, pero ahora veo que mi pregunta era un poco confusa. Necesito probar esto, pero me temo que no tengo tiempo en este momento. ¡Te llamaré si lo resuelvo! –

+0

Encontré [este enlace] (http://www.rondebruin.nl/getimage.htm) de Ron de Bruin. Por favor, vea los ejemplos bajo el encabezado llamado _Change Image with VBA después de abrir el archivo_ para un posible camino a seguir. ¡Es lo mejor que puedo hacer por ti hoy! –

Cuestiones relacionadas