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