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

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

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

Notapor MartyMcfly » Mié Mar 07, 2018 4:13 am

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) 13 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
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Macro para imprimir y validar correcta carga de datos

Notapor FJCC-ES » Mié Mar 07, 2018 5:19 am

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   Expandir vistaContraer vista
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
FJCC-ES
 
Mensajes: 610
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro para imprimir y validar correcta carga de datos

Notapor MartyMcfly » Mié Mar 07, 2018 2:48 pm

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
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

Notapor FJCC-ES » Mié Mar 07, 2018 4:08 pm

Las variables Producto y valor controlan el valor de Producto
Código: Seleccionar todo   Expandir vistaContraer vista
Producto = Producto * valor

Producto empieza con el valor 1
Código: Seleccionar todo   Expandir vistaContraer vista
Producto = 1

En el bucle que empieza con
Código: Seleccionar todo   Expandir vistaContraer vista
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   Expandir vistaContraer vista
Producto = Producto * valor = 1 * 1 = 1

Si la celda está vacía, valor = 0 y Producto cambia a 0 porque
Código: Seleccionar todo   Expandir vistaContraer vista
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.
FJCC-ES
 
Mensajes: 610
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Notapor MartyMcfly » Jue Mar 08, 2018 3:27 am

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   Expandir vistaContraer vista
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
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

Notapor FJCC-ES » Jue Mar 08, 2018 4:11 am

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?
FJCC-ES
 
Mensajes: 610
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Notapor MartyMcfly » Jue Mar 08, 2018 2:30 pm

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) 10 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
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

Notapor FJCC-ES » Jue Mar 08, 2018 5:22 pm

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) 14 veces
FJCC-ES
 
Mensajes: 610
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Notapor MartyMcfly » Vie Mar 09, 2018 3:33 am

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
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados