Archive

Posts Tagged ‘OLEObjects’

EXCELeINFO add-in 2.2.9 – restablecer tamaño de objetos OLE

En base al post de Solución a: el texto de los botones se ve comprimido he añadido al add-in tal herramienta para solucionar los casos mencionados.

Se añade un formulario donde se muestra el ejemplo de cómo quedarían los objetos después de utilizar la macro.

Imagen del formulario

Imagen del formulario

 

:: Descargar EXCELeINFO add-in 2.2.9

Solución a: el texto de los botones se ve comprimido

July 30, 2011 1 comment

Es muy común que se utilicen controles ActiveX (OLEObjects) en hojas de Excel para ejecutar macros, como lo son los botones. Y también es común sin una causa aparente que después el texto de los bonotes y demás controles sufran un cambio en la apariencia y se noten comprimidos. Como se muetra en la imagen:

image

Tal cambio en el diseño he descubierto que se ‘logra’, por decirlo de algún modo’, cuando utilizamos la función de Excel de ‘Mostrar fórmulas’. Dicho movimiento genera que nuestros controles cambien de tamaño, y al regresar al modo normal, queden como la imagen anterior.

Solución

La solución que propongo es que se le cambie de manera manual el tamaño a los controles y después asignarles el tamaño original, pero esto causaría mucha pérdia de tiempo por que deberá uno por uno.

Por tal motivo he creado un libro de Excel con los controles con todos los controles que sufren cambios y escrito una macro que restablece el diseño de los controles.

Cómo funciona ??

He añadido 9 controles a la hoja y creado una macro que muestra y oculta las fórmulas, para así después utilizas otra macro que restable el diseño.

Imagen del ejemplo

image

Antes

image

Después

Código del ejemplo

Sub RestablecerObjetos()
Dim CuentaObjetos As Integer
'Asignamos la varible que almacenará la cuenta de objetos en la hoja
CuentaObjetos = ActiveSheet.OLEObjects.Count
'Congelamos la pantalla
Application.ScreenUpdating = False
'Hacemos el ciclo que recorrerá cada objeto
For i = 1 To CuentaObjetos
    With ActiveSheet
        'Guardamos en variable el tamaño actual de cada objecto
        AnchoActual = .OLEObjects(i).Width
        'Asignamos un tamaño x a cada objecto
        .OLEObjects(i).Width = "1"
        'Le devolvemos el tamaño a cada objecto
        .OLEObjects(i).Width = AnchoActual
        Application.StatusBar = "Restableciendo " & .OLEObjects(i).Name
    End With
Next i
'Restauramos pantalla y barra de estado
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

:: Descargar el ejemplo EXCELeINFO – Restablecer tamaño de objetos