GIRAR 180 GRADOS EL CONTENIDO DE UN RANGO SELECCIONADO EN EXCEL

Hola  a todos!.

Hace unos días un lector me enviaba una consulta acerca de la posibilidad de mostrar información en una celda en modo “imagen reflejada”, esto es, girar los caracteres de una palabra o frase 180 grados. La utilidad en estos casos suele ser para imprimir esa información y aplicarla en diferentes contextos, por ejemplo las ambulancias, que lo usan en el frontal del vehículo para que los conductores a los que necesita adelantar puedan leer que se trata de una ambulancia.

Si bien, para realizar esta tarea las impresoras suelen estar dotadas esta función, normalmente es necesario activarla en las características de la impresora o en el acabado de la hoja, etc …, en algunos casos o bien no existe esa posibilidad o bien la opción está desactivada por un administrador y no podemos realizar nuestro trabajo.

En Excel, se pueden girar los caracteres en una celda, pero el giro está limitado hasta los 90 grados, de forma que no lo podremos hacer directamente desde el menú. Pero existe una opción que sí nos permitiría girar los 180 grados, y es pasando el contenido de la celda a imagen y luego realizar el giro (en giro 3D):

GIRAR 180 GRADOS EL CONTENIDO DE UN RANGO SELECCIONADO EN EXCEL

Siguiendo con este método, podemos utilizar un poco de programación para que sea un poco más automático, de forma que solo tendremos que seleccionar el área o rango de celdas con la información y con tan solo pulsar un botón obtendremos los datos tal y como los necesitamos.

Imaginad que tenemos este texto y lo queremos mostrar reflejado:

GIRAR 180 GRADOS EL CONTENIDO DE UN RANGO SELECCIONADO EN EXCEL1

Para realizar esta tarea vamos a utilizar este código:

Sub GENERAR_IMAGEN_REFLEJADA()
'Definimos variables
Dim Area As Object
'Desactivamos actualización de pantalla
Application.ScreenUpdating = False
'Controlamos que existan datos en la selección
On Error GoTo Control
With ActiveSheet
Set Area = Application.Intersect(Selection, .UsedRange)
Area.Select
'Centramos horizontal y verticalmente el texto seleccionado
With Area
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
'Copiamos la selección y la pegamos en "C2"
Selection.Copy
.Range("C2").Select
.Pictures.Paste.Select
End With
'Rotamos la imagen 180 grados
With Selection
.ShapeRange.ThreeD.RotationX = -180
.Copy = False
End With
'Si no hemos seleccionado datos, mostramos mensaje de advertencia
Control: If Err.Number = "91" Then MsgBox ("EL RANGO SELECCIONADO NO CONTIENE DATOS"), vbExclamation, "SELECCIONA RANGO"
Application.ScreenUpdating = True
End Sub

Para este ejemplo he dejado un botón de comando para que probéis, pero también se podría modificar para ejecutarlo pulsando una tecla.

El resultado es el siguiente:

GIRAR 180 GRADOS EL CONTENIDO DE UN RANGO SELECCIONADO EN EXCEL2

Seleccionáis desde A2 a A3 y al pulsar el botón se generará la imagen reflejada automáticamente.

La imagen se pegará a partir de la celda “C2” (podéis especificar el lugar que más os convenga) y luego tan solo tendréis que establecer un área de impresión entorno a la imagen e imprimir.

Y eso es todo! 🙂

Descarga el archivo de ejemplo pulsando en: GIRAR 180 GRADOS EL CONTENIDO DE UN RANGO SELECCIONADO EN EXCEL

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Anuncios

ELIMINAR TODAS LAS IMÁGENES (FORMAS) DE UNA HOJA O UN LIBRO EN EXCEL CON VBA

Hace unos días recibí una consulta sobre cómo se podría modificar el tamaño de todas las imágenes de una hoja o de un libro mediante una macro.

Aunque este tema ha sido muy tratado en diferentes webs y foros de internet, me ha parecido útil escribir un post acerca del tratamiento de imágenes (o mejor, de cualquier objeto de la colección shapes).

Es decir, en Excel podemos estar trabajando con una fotografía, un organigrama de SmarArt, un gráfico o un objeto Ole, etc).  Todo ellos objetos que forman parte de la colección Shapes.

Siguiendo un caso práctico, imaginad que tenemos un libro con las siguientes formas (imágenes, autoformas, llamadas, objeto SmartArt):

eliminar-todas-las-imagenes-formas-de-una-hoja-o-un-libro-en-excel-con-vba

Dicho esto, si quisiéramos eliminar todos los objetos de la primera hoja de nuestro libro, lo haríamos así:

Sub Borrar_Hoja()
Dim Shape As Excel.Shapes
'Por cada forma en la hoja 1
For Each Shapes In Sheets(1).Shapes
' Eliminamos forma
With Shapes
.Delete
End With
Next
End Sub

Si quisiéramos eliminar todas las formas (Shapes) que existen el libro, tendríamos que utilizar la macro anterior pero dentro de un bucle for – next que recorra todas las hojas del libro:

Sub Borrar_Libro()
Dim nHoja As Integer
Dim Shape As Excel.Shapes
'Contamos las hojas del libro activo
nHoja = ActiveWorkbook.Worksheets.Count
'Inicimiamos bucle.
For i = 1 To nHoja
'En cada hoja seleccionamos todas las formas
For Each Shapes In Sheets(i).Shapes
'y las borramos
With Shapes
.Delete
End With
Next
Next i
End Sub

Sin embargo, si solo queremos eliminar un tipo de forma, tendríamos que especificar en el código el tipo que deseamos eliminar. Antes de seguir, os dejo un enlace a Microsoft donde se especifica el nombre y valor de todas las formas de la colección shapes:

https://msdn.microsoft.com/en-us/library/office/ff860759.aspx

eliminar-todas-las-imagenes-formas-de-una-hoja-o-un-libro-en-excel-con-vba1

*en el caso del valor 24, como observaréis, he modificado el Name que aparece publicado en Microsoft en el enlace de Microsoft (msoIgxGraphic) por (msoSmartArt), el motivo es que he probado el nombre msoIgxGraphic en todas las versiones desde 2010 en adelante y no funciona, pero sí lo hace con msoSmartArt.

Por lo tanto, para realizar la prueba vamos a elegir un tipo determinado de forma a eliminar, tanto en la primera hoja como en todo el libro. La elección serán las fotografías, que equivalen según el cuadro anterior a msoPicture y con valor 13.

Para eliminar las fotografías de la primera hoja, usaremos el siguiente código:

Sub Borrar_Hoja_Tipo()
Dim Shape As Excel.Shapes
'Por cada forma en la hoja 1
For Each Shapes In Sheets(1).Shapes
' Eliminamos forma
With Shapes
'Si la forma es entonces la borramos
If .Type = 13 Then
.Delete
End If
End With
Next
End Sub

Y para eliminar las fotografías en todo el libro, usaremos el siguiente:

Sub Borrar_Libro_Tipo()
Dim nHoja As Integer
Dim Shape As Excel.Shapes
'Contamos las hojas del libro activo
nHoja = ActiveWorkbook.Worksheets.Count
'Inicimiamos bucle.
For i = 1 To nHoja
'En cada hoja seleccionamos/detectamos todas las formas
For Each Shapes In Sheets(i).Shapes
With Shapes
'Si la forma es entonces la borramos
If .Type = 13 Then
.Delete
End If
End With
Next
Next i
End Sub

El resultado después de aplicar la macro sería este:

eliminar-todas-las-imagenes-formas-de-una-hoja-o-un-libro-en-excel-con-vba2

Y hemos eliminado las fotografías en todo el libro.

Evidentemente, podemos utilizar las macros para cualquier otro tipo de acción sobre las formas, como por ejemplo darle formato, colores, alto, ancho, etc … Pero para este ejemplo, nos hemos limitado a eliminar (en otros post que tengo pensado ir publicando iremos trabajando otras acciones).

En el archivo adjunto os dejo las macros. Sin embargo los botones que he dejado para ejecutarlas, solo son para los casos donde determinamos el tipo de forma a eliminar. Las macros que eliminan todas las formas de la hoja y del libro, si pusiese un botón en la hoja, directamente lo eliminaría, dado que también se trata de una forma (control de formulario).

Espero que os sea de utilidad 🙂

Descarga el archivo de ejemplo pulsando en: ELIMINAR TODAS LAS IMÁGENES DE UNA HOJA O UN LIBRO EN EXCEL CON VBA