[RESUELTO] Macro Para Impr. Y Validar Correcta Carga DeDatos

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

[RESUELTO] Macro Para Impr. Y Validar Correcta Carga DeDatos

Mensaje por MartyMcfly »

Hola a todos, mi consulta es la siguiente:

tengo un Libro con una Macro que utilizo para imprimir una tabla, la Macro esta asociada a un botón que envia a impresión rápida, y lo que busco es agregarle, a mi código, un chequeo de las celdas con datos, solo necesito que revise que no esten en blanco y recien ahí continue con el comando Print.

Revise en el libro de Mauricio y encontre como especificarle un rango a la hoja activa, y a una sola celda individual y frustadamente no supe integrarlos al mi código.

Los datos en el Libro donde utilizare la Macro van en diversas celdas (unas 10) no en un rango (pj: A1, J3, B9, R5, ect) y estos son seleccionados de una lista deplegable que los toma de una base de datos y los referencia a las celdas donde la macro tendría que "fijarse" que no estan en blanco antes de enviar a imprimir.

Adjunto un Libro de ejemplo con una Tabla con datos y la macro. En el ejemplo lo que necesito es que la macro, antes de enviar a imprimir, valide que las celdas D1, D7, D9, E4 y E7 no esten "vacias" si tienen cualquier dato (fecha, texto, número) continúe con el comando imprimir, sino msgbox "Faltan datos" y hasta que todas esten con datos no imprima. La otra que pense es alguna función que bloquee el botón, pero no puede encontrar manera.

Agredezco la ayuda.
Impresion+Validacion.ods
(12.33 KiB) Descargado 185 veces
Última edición por MartyMcfly el Mié Mar 07, 2018 2:50 pm, editado 1 vez en total.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro para imprimir y validar correcta carga de datos

Mensaje por FJCC-ES »

No entiendo porque las celdas D1, D7, D9 , E4 y E7 son las que no deben estar vacías. Esta macro valida solamente esas celdas.

Código: Seleccionar todo

sub CambioDeImpresora

rem codigo de FJCC **************************
oHoja = ThisComponent.Sheets.getByName("Hoja1")
Celdas = Array("D1", "D7", "D9", "E4", "E7")
Producto = 1
For i = 0 to UBOUND(Celdas)
	Celda = oHoja.getCellRangeByName(Celdas(i))
	Tipo = Celda.Type
	If Tipo = com.sun.star.table.CellContentType.EMPTY Then
		valor = 0
	Else
		valor = 1
	End If
	Producto = Producto * valor
next i
If Producto = 0 Then
	MsgBox "Faltan Datos"
Else
rem FJCC ***************************

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
Dim Doc As Object
Dim PrinterProperties(1) As New com.sun.star.beans.PropertyValue
Dim PaperSize As New com.sun.star.awt.Size
 
PaperSize.Width = 21000   ' corresponde a 21 cm
PaperSize.Height = 29700   ' corresponde a 29,7 cm
PrinterProperties (0).Name="Name"
PrinterProperties (0).Value="Microsoft XPS Document Writer"
PrinterProperties (1).Name="PaperSize"
PrinterProperties (1).Value=PaperSize
ThisComponent.Printer = PrinterProperties()

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Printer"
args2(0).Value = "Microsoft XPS Document Writer"

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())

Rem FJCC **************************
End If

end sub
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Macro para imprimir y validar correcta carga de datos

Mensaje por MartyMcfly »

FJCC-ES las celdas que mencione eran a modo de ejemplo.

Probe el código que me pasaste y funciona a la perfección, si falta un dato la macro no continúa hasta que dichas celdas esten con datos. Lo que no entendi es donde agregaste "Producto", que función cumple?

Te agradezco desde ya por haberte tomado el tiempo para ayudarme!
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: [RESUELTO]Macro para impr. y validar correcta carga de d

Mensaje por FJCC-ES »

Las variables Producto y valor controlan el valor de Producto

Código: Seleccionar todo

Producto = Producto * valor
Producto empieza con el valor 1

Código: Seleccionar todo

Producto = 1
En el bucle que empieza con

Código: Seleccionar todo

For i = 0 to UBOUND(Celdas)
la macro prueba si cada celda esta vacía, si su propiedad Type = com.sun.star.table.CellContentType.EMPTY. Si no está vacía, la macro asigna 1 a la variable valor y Producto mantiene el valor 1 porque

Código: Seleccionar todo

Producto = Producto * valor = 1 * 1 = 1

Si la celda está vacía, valor = 0 y Producto cambia a 0 porque

Código: Seleccionar todo

Producto = Producto * valor = 1 * 0 = 0

Una vez que Producto = 0, mantiene ese valor porque el producto de cero con cualquier número es cero. Así que si una celda está vacía o varias están vacías, Producto = 0. Después del bucle, el valor de Producto determina si el código muestra el mensaje “Faltan Datos” o si imprime el documento.
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: [RESUELTO]Macro para impr. y validar correcta carga de d

Mensaje por MartyMcfly »

La verdad que no se que decirte, un lujo la explicación, y seguiren leyendo así trato de preguntar menos o al menos con algo más resuelto. Gracias nuevamente por la paciencia.

Para lo que no me corrio es para una celda donde en dato viene referenciado de un "Campo formateado" donde cargo un valor numérico, por más que en el campo formateado coloque cero, y al cheqeear, en la celda a la que referencia dicho "Campo", que esta vacia, la macro la toma como si tuviera un dato y continúa como si nada. No puedo cambiarlo a "Campo de texto" ya que necesito que el formato del mismo sea si o si con dos decimales.

Despues, Lo único raro es cuando utilice el tu código, para validar celda individuales, en otra macro, el IDE me pidio declarar todas las variables, a lo cual le agregue:

Código: Seleccionar todo

Dim oHoja as object
Dim Celda as object
Dim Producto as integer
Dim i as integer
Dim Celdas as object
Dim Tipo as integer
Dim Valor as integer
Y salio funcionando perfectamente.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: [RESUELTO]Macro para impr. y validar correcta carga de d

Mensaje por FJCC-ES »

MartyMcfly escribió:Para lo que no me corrio es para una celda donde en dato viene referenciado de un "Campo formateado" donde cargo un valor numérico, por más que en el campo formateado coloque cero, y al cheqeear, en la celda a la que referencia dicho "Campo", que esta vacia, la macro la toma como si tuviera un dato y continúa como si nada.
¿Puede subir un archivo que muestra esto?
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: [RESUELTO]Macro para impr. y validar correcta carga de d

Mensaje por MartyMcfly »

Te adjunto:

Fijate que al colocar un cero lo toma como que no esta vacia, y al no colocar nada #N/D, tambien lo toma como datos. Si lo cambio a "Campo de texto" si, toma la celda como vacia, pero pierdo el formato 0,00.
Impresion+Validacion.ods
(13.48 KiB) Descargado 159 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: [RESUELTO]Macro para impr. y validar correcta carga de d

Mensaje por FJCC-ES »

En esta versión del código, las celdas tienen que contener un número (puede ser una fecha) o texto. Si una celda está vacía o si contiene una fórmula el código muestra “Faltan Datos”. La propiedad Type de una celda que muestra #N/D es com.sun.star.table.CellContentType.FORMULA, así que si el “Campo Formateado” está en blanco, el código mostrará “Faltan Datos”.
Adjuntos
ImprimirDatos_2.ods
(13.54 KiB) Descargado 182 veces
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: [RESUELTO] Macro Para Impr. Y Validar Correcta Carga DeD

Mensaje por MartyMcfly »

Excelente!!

Te agredezco la ayuda y las explicaciones que me brindaste, me sirvieron de mucho. Ahora si esta vacia, y muestra el #N/D en la celda ya no permite continuar, si tiene un cero si, pero el tema era que cuando queda vacia no imprima el libro con un campo vacio sin dato.

:super: :bravo: :super:
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Responder