Useform

4 envíos / 0 nuevos
Último envío
Juan Giraud
Imagen de Juan Giraud
Offline
última acción: Hace 2 años 7 meses
alta: 08/06/2018 - 12:51
Puntos: 145
Useform

alguien me puede dar una mano con este formulario

He creado un Form para carga de datos en una hoja, con la particularidad de que algunas celdas contienen un rango mas amplio, adjunto el formulario para que se entienda, la idea es si alguien me puede dar una ayuda con los codigos.

muchas gracias

AdjuntoTamaño
File recibos.xlsm28.39 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Bueno, lo primero es decirte

Bueno, lo primero es decirte que las celdas combinadas son enemigas de la vida y del mundo. Están prohibidas por la ONU, por la CNN, por la Guardia Civil y otros organismos internacionales. Y es la peor idea que ha tenido alguien en Microsoft, y eso que en Microsoft programaron el Windows Millenium...

 

En serio, si vas a guardar información, te recomiendo no utilizar celdas combinadas. Estas son solo útiles en hojas de presentación de datos, porque generan algo más visual, pero para almacenar datos en una lista, sin tienes que repetir el valor de la columna 1, lo repites. Todo funcionará mejor.

Dicho esto, tu código casca desde el principio, precisamente por las celdas combinadas, al intentar encontrar la última fila con datos. En tu celda A2:A15 tienes un valor. Excel internamente entiende que el valor está en A2, y que A3, A4.. A15 están vacías. Puede haber muchas formas de saltarte esta limitación. Desde mi punto de vista, la mejor es eliminar las celdas combinadas y repetir el valor las 14 veces.

Segundo. ¿Es necesario guardar siempre 14 espacios para cada recibo? ¿No sería mejor rellenar solamente los espacios que se necesiten cada vez?

Tercero. Mucho menos importante. En el bloque For para impedir facturas repetidas, pones un exit for tras un exit sub. Si sale de la subrutina, sin duda sale del for. No haría falta esa línea.

Cuarto. Y esto es muy importante. En tu bloque para guardar la información, estás guardando todos los datos en la misma fila, sobreescribiendo celdas. Podrías hacer algo así:

If MsgBox("Son correctos los datos?" + Chr(13) + "Desea proceder?", vbOKCancel) = vbOK Then

'Envía los datos a la hoja de carga de recibos

Me.recibo = &HFFFFFF         ------> ¿Quieres cambiar el color? Más arriba lo tienes cambiado correctamente.

Hoja2.Cells(Final, 1) = Me.Fecha

Hoja2.Cells(Final, 2) = Me.recibo

Hoja2.Cells(Final, 3) = Me.agencia

Hoja2.Cells(Final, 4) = Me.comp1

Hoja2.Cells(Final, 5) = Me.impc1

Final = Final + 1

'Si optas por eliminar las celdas combinadas, tendrás que repetir las asignaciones a las tres primeras columnas cada vez que modifiques el valor de Final.

Hoja2.Cells(Final, 4) = Me.comp2

Hoja2.Cells(Final, 5) = Me.impc2

Final = Final + 1

Hoja2.Cells(Final, 4) = Me.comp3

Hoja2.Cells(Final, 5) = Me.impc3

Final = Final + 1

Hoja2.Cells(Final, 4) = Me.comp4

Hoja2.Cells(Final, 5) = Me.impc4

End If


Espero que estos apuntes te sirvan para darle una pensada

Juan Giraud
Imagen de Juan Giraud
Offline
última acción: Hace 2 años 7 meses
alta: 08/06/2018 - 12:51
Puntos: 145
Hola Cron, gracias por

Hola Cron, gracias por responder. Si esa era la otra alternativa, era para no repettir 3 campos varias veces

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
La verdad es que desde la

La verdad es que desde la perspectiva humana tiene mucho sentido, y por eso es lo que nos sale instintivamente. Pero los ordenadores no tienen sentimientos, y son capaces de repetir la misma operación millones de veces por segundo sin aburrirse.

Pero desde el punto de vista en el que el número de operaciones por segundo no es un problema, y el volumen de datos almacenado tampoco (estas dos cosas hoy en día son lo habitual), es mejor construir una tabla completa porque luego es mucho más sencillo operar con ella.

 

Un saludo