jueves, 25 de mayo de 2017

VBA: Macro Imprimir Word desde Excel

Un usuario preguntaba por la forma de abrir e imprimir documentos de Word desde Excel.
Para dar respuesta compondremos una sencilla macro.


Abrimos la ventana de código de nuestro módulo estándar y añadimos el siguiente código:

Sub imprime_Word_desde_Excel()
Dim objWord
'abrimos Word
Set objWord = CreateObject("Word.Application")
'mostramos o hacemos visible la aplicación
objWord.Visible = True
'si no deseamos sea visible cambiamos a FALSE
'(OJO, si queremos ver la vista previa debe estar en TRUE)

'identificamos el docx a imprimir
'y lo abrimos (recuerda que no será visible)
Dim objDoc
Set objDoc = objWord.Documents.Open("E:\excelforo\MACRO PARA IMPRIMIR DOCUMENTO WORD DESDE EXCEL.docx")

'Si queremos podemos dirigir la imrpesión por una impresora concreta
Dim ImpresoraDefecto As String
ImpresoraDefecto = objWord.ActivePrinter
objWord.ActivePrinter = "HP Deskjet 3050A J611 series"     '(Tu nombre de impresora deseada)

'activamos la aplicación (Word)
objWord.Activate

'Lanzamos la impresión
objDoc.PrintOut
'o si lo prefieres la vista previa
'objDoc.PrintPreview

'Reseteamos la impresora por defecto para futuras impresiones
objWord.ActivePrinter = ImpresoraDefecto

'cerramos el documento y la aplicación
objDoc.Close
objWord.Quit

End Sub



Bastará ejecutarla...

martes, 23 de mayo de 2017

La función FORMULATEXTO y cómo sacar datos de una fórmula

Un lector del blog consultaba por la forma de extraer información a partir de las partes que componen una fórmula.

El comentario del usuario:
[...]Se trata de conseguir extraer de una celda con una formula del tipo =500*1,25 lo que va antes del signo *. pero al usar la función hallar, como * es precisamente un comodín me sale siempre la 1ª posición y aunque le ponga hallar "*1," tampoco funciona, aunque esto no me valdría porque podría darse el caso de que se multiplique por otro numero[...]


Para dar respuesta a este problema partiremos del siguiente conjunto de celdas formuladas:

La función FORMULATEXTO



Comprobamos que existe un patrón en todas las fórmulas, donde se está realizando un producto de varios importes y que, de acuerdo a lo solicitado, necesitamos trabajar únicamente con el primero de los valores (lo que va antes del signo *).

La solución nos la dará una función poco frecuente: FORMULATEXTO.
Esta función es interesante porque nos devuelve en modo cadena de texto las fórmulas o funciones introducidas en nuestras celdas.
Precisamente esta característica es de la que nos aprovecharemos para recuperar la información que necesitamos... ya que con las funciones de texto EXTRAER y ENCONTRAR trataremos la cadena de texto devuelta, consiguiendo finalmente nuestro objetivo.



La fórmula que buscamos para obtener lo requerido es (en la celda D2):
=EXTRAE(FORMULATEXTO(B2);2;ENCONTRAR("*";FORMULATEXTO(B2))-2)
donde del texto devuelto por la función FORMULATEXTO empezamos a extraer desde la posición 2, i.e., después del igual; y extraemos los caracteres hasta la posición anterior al signo de multiplicación o asterisco...
Si lo necesitáramos, para convertir el dato devuelto a número, podríamos anidar la fórmula anterior dentro de la función VALOR.

De esta forma hemos salvado el problema del lector y el conflicto que causaba usar el asterisco como signo de búsqueda, ya que es un operador de multiplicación pero también un carácter comodín.

jueves, 18 de mayo de 2017

Iconos en las Etiquetas de datos de un gráfico

Como continuación del post anterior donde vimos algunas formas de representar gráficamente variaciones/comparaciones entre datos, hoy veremos una forma de mostrar datos comparativos empleando iconos en las etiquetas de datos de los gráficos.

Iconos en las Etiquetas de datos de un gráfico


La meta es lograr unas etiquetas de datos para nuestras serie de valores que cambie de color según aumente o disminuya frente al ejercicio anterior, mostrando además una flecha hacia arriba o hacia abajo según corresponda.

Partiremos de los datos base siguientes:

Iconos en las Etiquetas de datos de un gráfico



Un primer paso es recordar ciertas combinaciones con la tecla Alt para obtener ciertos caracteres:
Alt + 16 ►
Alt + 17 ◄
Alt + 30 ▲
Alt + 31 ▼
Alt + 254 ■

Iconos en las Etiquetas de datos de un gráfico


Con estos caracteres construiremos tres formatos personalizados de números:

Iconos en las Etiquetas de datos de un gráfico


Estos formatos de número personalizado con los iconos/caracteres los emplearemos posteriormente para formatear las etiquetas de datos de nuestro gráfico.

Siguiente paso.
Generaremos una serie de rangos auxiliares calculados:


Las fórmulas incorporados nos devolverán las diferencias de un año con el anterior, en tres series,
una por cada categoría:
1- para incrementos: (en la celda F3 y luego arrastramos en F3:F8)
=SI(E3>E2;E3-E2;NOD())
2- para igualdades: (en la celda G3 y luego arrastramos en G3:G8)
=SI(E3=E2;E3-E2;NOD())
3- para disminuciones: (en la celda H3 y luego arrastramos en H3:H8)
=SI(E3<E2;E2-E3;NOD())


Seleccionando el rango D1:H8 e insertando un gráfico de columnas apiladas obtenemos:

Iconos en las Etiquetas de datos de un gráfico



A continuación añadimos las etiquetas de datos a nuestras cuatro series.
A las etiquetas de datos de la serie 'incremento', desde el formato de etiquetas > Opciones de etiqueta > Número > Categoria 'Personalizada' > Tipo: 0" ▲" (previamente generado).



Repetimos la acción para las otras dos series restantes ('igualdad' y 'disminución'), con sus correspondientes formatos de número (0" ▼" y 0" ■"), que en los primeros pasos habíamos creado.

En estos formatos podríamos haber otorgado alguna propiedad del color de la fuente:
[Verde]0" ▲"
[Rojo]0" ▼"
y
[Azul]0" ■"

En mi caso prefiero dar color desde los formatos normales desde la Ficha Inicio > grupo Fuente > botón Color de fuente, ya que la diversidad de colores es mucho mayor!.


Acabamos aplicando un formato de relleno (Sin Relleno) para las tres series generadas



Dando por concluido nuestro gráfico.