Página 1 de 1

[RESUELTO] Macro para sobrescribir datos con formulario

Publicado: Mar Mar 03, 2020 4:40 pm
por ivanbr3
Hola a todos,

hace poco escribí otra duda la cual fue resuelta, pero conforme voy avanzando en el proyecto que estoy haciendo me asaltan más dudas, y algunas no puedo darles solución yo mismo. He buscado por el foro y por Google a ver si había algo similar pero no lo he encontrado, en el caso de que lo hubiese pido disculpas por abrir este tema.

La cuestión es la siguiente: al pulsar un botón en una hoja de calc, debe aparecer un formulario, en primer lugar que haya una casilla de check para poder guardar los cambios y rellenar los datos a introducir que serían Operario, Fecha Realización, Fecha Próxima (es decir, activar esas opciones; si no está marcado el check, no se puede hacer nada).
Una vez que se introducen esos datos y le doy a Guardar y salir, esos datos deben sobrescribir a unos que ya había antes en otra hoja, en unas celdas concretas (por ejemplo la B3, B4 y B5 respectivamente, para que así al realizar el formulario de otra hoja, sobrescriba en las celdas C3, C4 y C5 por ejemplo).

Quizás no quede clara mi duda, si es así decidme que necesitáis para poder ayudarme.

Mil gracias a todos. Saludos!!

Re: Macro para sobrescribir datos con formulario

Publicado: Mar Mar 03, 2020 6:02 pm
por PepeOooSevilla
Hola.
  • Para construir un edificio debes empezar por construir unos buenos cimientos ...
Las macros no son fáciles pero si te interesa la programación para OpenOffice/LibreOffice tienes que leer y estudiar el libro Aprendiendo OOo Basic de nuestro compañero mauricio. También lo puedes consultar aquí: Guía de introducción al uso de Apache OpenOffice > Temas Avanzados > Macros > StarBasic

Además en las páginas Manuales de Apache OpenOffice en español: Basic y, Basic OpenOffice: Apache OpenOffice Basic en español de nuestro compañero SLV-es, encontrarás muy buena información.

Dicho esto, creo que deberías concretar mucho más tu consulta para recibir respuestas más ajustadas a tu necesidad y, a ser posible, deberías subir un archivo de ejemplo. Si no sabes cómo subir un archivo, consulta Cómo adjuntar un archivo.

Saludos cordiales.

Re: Macro para sobrescribir datos con formulario

Publicado: Mié Mar 04, 2020 1:58 pm
por ivanbr3
Adjunto un archivo con lo que estoy intentando hacer, explico un poco mejor...

En el archivo tenemos 5 hojas (MENU, LISTADO, SIST. ELECT., CONTRAINC., OFIC.)
Desde la hoja MENU tenemos botones que nos llevan hasta las otras hojas, hasta ahí todo bien.
En las hojas SIST. ELECT., CONTRAINC. y OFIC. quiero que haya un botón (de cada instalación dentro de esas zonas) que me abra un formulario para poder introducir datos (en el ejemplo solo está hecho en la hoja de SIST. ELECT.).
En la hoja LISTADO nos aparece una lista con todas las instalaciones que hay y diferentes datos del mantenimiento a realizar.

El problema es el siguiente: una vez hago click en el botón del formulario en SIST. ELECT. (alguno de los 3 que hay: CT1, CT2 o GE), se abre el diálogo correspondiente y me pide que introduzca 3 datos (Quién, Tipo y Próxima Fecha). Lo que necesito es que si por ejemplo abro CT1 e introduzco los datos correspondientes, al darle a guardar y salir, que esos datos los sustituya por los que ya había en la hoja LISTADO en la misma posición. Lo mismo si lo hago con CT2 o GE o cualquiera de los demás que introduzca.

Además, también necesitaría modificar la macro para que:
1) al darle al botón de Guardar y Salir, se cerrase el formulario y no tuviese que darle a cancelar.
2) si veis al abrir el diálogo (formulario), arriba aparece una casilla de Check, me gustaría que no se pudiesen introducir datos ni guardarlos si esa casilla no está marcada.

Gracias por la ayuda!!!!

Re: Macro para sobrescribir datos con formulario

Publicado: Mié Mar 04, 2020 10:49 pm
por gustavodiaz00
Hola te devuelvo el archivo con algunas correcciones espero que te sirvan.
EJEMPLO.ods
(14.33 KiB) Descargado 272 veces

Re: Macro para sobrescribir datos con formulario

Publicado: Jue Mar 05, 2020 1:04 am
por ivanbr3
Hola, gracias por responder y por la ayuda.

Esta muy bien, lo único que al guardar la fecha se guarda en fecha realizada (debería guardarse en fecha programada y haber otra casilla en el formulario que pusiese Fecha Realización y esa si iría ahí, se me olvidó comentarlo con anterioridad), y que al guardar la fecha aparece una comilla ( ' ) delante y no lo lee como fecha.

¿Se podría solucionar eso?

Muchisimas gracias compañeros.

Re: Macro para sobrescribir datos con formulario

Publicado: Jue Mar 05, 2020 1:30 am
por gustavodiaz00
Hola con respecto a donde se guarda la fecha es muy sencillo en

Código: Seleccionar todo

    ThisComponent.Sheets(1).GetCellByPosition(6,Fila).SetFormula( xDato )
    ' Reemplaza el 6 por 7  GetCellByPosition(columna, Fila) se cuentan desde cero
La fecha de realización no la podes guardar en el mismo dialogo porque este dialogo sirve para programar una tarea.
Recien cuando la tarea sea realizada deberias ingresar la fecha de finalizacion con otro dialogo.
Al no tener la fecha guardada a simple vista podes saber cuales tareas faltan realizar y si estan vencidas o por vencerce.

Con respecto al ingreso de la fecha no vi ningun problema yo la ingreso asi 04-03-20.

Suerte y no aflojes

Re: Macro para sobrescribir datos con formulario

Publicado: Jue Mar 05, 2020 11:58 am
por ivanbr3
Vale, he estado probando y he detectado el problema de la fecha y es que lo guarda de la siguiente manera: mes/día/año, en vez de día/mes/año.

Además, he ido añadiendo las demás casillas que necesitaba para Fecha de Realización y Observaciones, la primera perfecto, pero al añadir la segunda me salta el error siguiente que aparece en la imagen adjunta.

Aquí os dejo el código:

Código: Seleccionar todo

   ' Almacena los datos en la siguiente línea disponible de la Hoja2, y vacía los datos del formulario
Sub Guardar_Datos()
'-------------------------------------------------------------------
   Dim xDato As Variant, nRow As Long
   Dim Fila As  Integer
   Dim Mensaje1 As String
   Dim Mensaje2 As String
   Dim Mensaje3 As String
   Dim Mensaje4 As String
   Dim Mensaje5 As String
   
   
   With oDialogo.Model
     If .ComboBox1.Text = "" then
      Mensaje1 = "Falta seleccionar Tipo de Mantenimiento"
     end if 
     If .TextField1.Text = "" then
      Mensaje2 = "Falta introducir Nombre Operario/Empresa"
     end if 
     If .TextField2.Text = "" then
      Mensaje3 = "Falta introducir Fecha Programada"
     end if 
     If .TextField3.Text = "" then
      Mensaje4 = "Falta introducir Fecha de Realización"
     end if
     If .TextField4.Text = "" then
      Mensaje5 = "Falta introducir Observaciones (si no existen, introduzca un guión [-])"
  End With
  
  If Mensaje1 <> "" or Mensaje2 <> "" or Mensaje3 <> "" or Mensaje4 <> "" or Mensaje5 <> "" then
   MsgBox Mensaje1 & Chr(10) & Mensaje2 & Chr(10) & Mensaje3 & Mensaje4 & Mensaje5, 64, "Diálogo en Calc"
   exit sub
  end if   
   
   If Ir_A = "CT1" then
    Fila = 6
   end if 
   If Ir_A = "CT2" then
    Fila = 7
   end if 
   If Ir_A = "GE" then
    Fila = 8
   end if 
   
   If MsgBox( "¿Deseas guardar los cambios realizados?", 33, "Diálogo en Calc" ) =  1 Then
      nRow = UltimaFila( 1 )
      
      if oDialogo.getControl("CheckBox1").State = False then
       MsgBox "Active la casilla de verificacion si quiere guardar los datos", 64, "Diálogo en Calc"
       exit sub
      end if

      With oDialogo.Model
         xDato = .ComboBox1.Text
         ThisComponent.Sheets(1).GetCellByPosition(4,Fila).SetFormula( xDato )
 
         xDato = .TextField1.Text
         ThisComponent.Sheets(1).GetCellByPosition(5,Fila).SetFormula( xDato )
 
         xDato = .TextField2.Text
         ThisComponent.Sheets(1).GetCellByPosition(7,Fila).SetFormula( xDato )
         
         xDato = .TextField3.Text
         ThisComponent.Sheets(1).GetCellByPosition(6,Fila).SetFormula( xDato )
         
         xDato = .TextField4.Text
         ThisComponent.Sheets(1).GetCellByPosition(8,Fila).SetFormula( xDato )
 
         .ComboBox1.Text = ""
         .TextField1.Text = ""
         .TextField2.Text = ""
         .TextField3.Text = ""
         .TextField4.Text = ""
      End With
   End If
   Ir_A = ""
   oDialogo.EndExecute()

End Sub

Re: Macro para sobrescribir datos con formulario

Publicado: Jue Mar 05, 2020 3:01 pm
por gustavodiaz00
Hola te falta un end if en

If .TextField4.Text = "" then
Mensaje5 = "Falta introducir Observaciones (si no existen, introduzca un guión [-])"

Re: Macro para sobrescribir datos con formulario

Publicado: Jue Mar 05, 2020 9:32 pm
por ivanbr3
Cierto, no me había dado cuenta.
Muchísimas gracias compañero. Funciona de lujo!!!

Re: [RESUELTO] Macro para sobrescribir datos con formulario

Publicado: Jue Mar 05, 2020 9:53 pm
por gustavodiaz00
Creo que el tema esta resuelto.

Si es asi marca el tema como resuelto y cualquier duda abri otro tema

Saludos

Re: [RESUELTO] Macro para sobrescribir datos con formulario

Publicado: Lun Mar 09, 2020 11:12 am
por ivanbr3
Hola, sigo teniendo el mismo problema con la fecha y es que no lo guarda bien.
Si introduzco, por ejemplo, 16-10-2021, se introduce así: '16-10-21. Con la comilla delante, porque no detecta que sea una fecha válida.
Sin embargo, si introduzco por ejemplo 09-03-2020, la introduce como: 03-09-2020.
¿Cómo puedo solucionar esto?

Re: Macro para sobrescribir datos con formulario

Publicado: Mar Mar 10, 2020 2:28 am
por gustavodiaz00
Hola te envio una modificación
EJEMPLO.ods
(17.91 KiB) Descargado 260 veces

Re: Macro para sobrescribir datos con formulario

Publicado: Mié Mar 11, 2020 9:34 am
por ivanbr3
Nada, sigue ocurriendo el mismo problema, la comilla (') aparece al principio de la fecha y se introduce como MM/DD/AAAA

Re: Macro para sobrescribir datos con formulario

Publicado: Mié Mar 11, 2020 1:57 pm
por PepeOooSevilla
Hola.
Sustituye la línea 156 (procedimiento Sub Guardar_Datos()):

Código: Seleccionar todo

ThisComponent.Sheets(1).GetCellByPosition(6,Fila).SetFormula( xDato )
Por esta otra:

Código: Seleccionar todo

ThisComponent.Sheets(1).GetCellByPosition(6,Fila).SetValue( CDate(xDato) )
Y nos cuentas ...
Saludos cordiales.

Re: Macro para sobrescribir datos con formulario

Publicado: Sab May 09, 2020 3:54 pm
por ivanbr3
Perdón por al demora en responder, acabo de verlo.

Perfecto, ya si funciona. Muchas gracias!!!