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
Adjunto | Tamaño |
---|---|
recibos.xlsm | 28.39 KB |
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
Hola Cron, gracias por responder. Si esa era la otra alternativa, era para no repettir 3 campos varias veces
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