VBA mejorar código de ingreso de datos
buenas tardes doña Elsa, abro este nuevo tema como me solicitaste en el dia de hoy para mejorar el código con tus sugerencias, envío por correo el archivo muchas gracias
saludos cordiales
1 respuesta
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
Recibido. Ni bien lo tenga revisado te lo devuelvo a tu correo.
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
Estas sugerencias se me ocurrieron al ver tu código en consulta anterior, donde comentabas que tu proceso tenía cierta demora. Así que lo comento aquí por si otros deciden leerlo, y sin entrar en la revisión de tu libro.
Lo que te produce demoras en el proceso es que formateas celda x celda y línea x línea.
1 - Si tenés un bucle del tipo:
For i = 1 To ReCantidad '(Step 1 no hace falta indicarlo, se predetermina un sto de 1)
Dá idea de que el mismo proceso se repetirá en varias filas.
Entonces guardá la fila inicial en una variable, antes del For. Al finalizar el proceso tendrás la fila final.
Luego a continuación recién agregá las instrucciones de formateo.
Por ej:
Range("B" & ini & ":B" & fini).Select
Call PintaBerde 'Borde verde
Range("C" & ini & ":H" & fini).Select
Call Rellena
.... y así con cada formato
2 - Si en cambio tenés un proceso donde solo se llena una fila pero algunas celdas comparten el mismo formato, por ej. negrita, también lo podes hacer al final con una sola instrucción:
Por ej:
filx = ActiveCell.Row
Range("B" & filx & ", H" & filx & ", P" & filx).Select
Selection.Font.Bold = True
PD) En la sección Macros de mi sitio encontrarás otros ejemplos de selección de rangos.
Un detalle al margen: no hace falta que desprotejas la hoja permanentemente, con 1 vez al ingreso del UF es suficiente porque no veo que la vuelvas a proteger en otro momento.
Introducí estas mejoras y verás que el proceso se agiliza bastante.
![fitolink](http://blob.todoexpertos.com/letters/F_151_48.png?v=1)
buenos días doña Elsa, muchas gracias por su paciencia
la desprotección tengo que realizarlo dentro del proceso porque en la hoja de base de datos el código lo protege con solo cambiar de celda
se puede guardar la fila inicial y final?? como se hace eso??
si el proceso depende de n cantidad de activo que se ponga en la factura
por ejemplo en mi caso seria asi?
formato fila: fuente, 10; letra, tahoma; ancho fila, 13 Range("B" & ini).Select -> duda cuando es fila? Font.Size = 10 Font.Name = "Tahoma" RowHeight = 13 rango con lineas verdes de B a N Range("B" & ini & ":N" & fini).Select call pintaberde rango con lineas anaranjado de O a V Range("O" & ini & ":V" & fini).Select call pintabanja rango de rellenos M a n y de U a V Range("M" & ini & ":N" & fini & "U" & ini & ":V" & fini).Select call relleno negritas columnas B, M-N y U-V Range("B" & ini & ":B" & fini & "M" & ini & ":N" & fini & "U" & ini & ":V" & fini).Select Font.Bold = True
lo de la fila inicial y final no se como
saludos cordiales
![fitolink](http://blob.todoexpertos.com/letters/F_151_48.png?v=1)
quería avisar que me robaron la cuenta de gmail no se como paso, creo que la deje abierta en un netcafe y no me di cuenta
![Elsa Matilde](http://blob.todoexpertos.com/avatars/sm/elsamatilde.jpg?v=17)
Con respecto a cómo utilizar las variables ini y fini.
Por ej, luego del Do... Loop ya tenés la primer fila, entonces ahí la guardamos:
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
ini = activecell.Row
Después del Next i, es decir cuando termina el bucle For, tendrás la fila final.
fini = activecell.row
Y a partir de aquí recién le darás el formato a todo.
Nota: Me parece que en las 2 últimas te falta algún coma:
Range("M" & ini & ":N" & fini & ", U" & ini & ":V" & fini).Select
Sdos
Elsa
![fitolink](http://blob.todoexpertos.com/letters/F_151_48.png?v=1)
el código del formato debe ir después del next i cierto? la cosa es que puse asi el código
For i = 1 To ReCantidad Range("B7").Select Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Select Loop pf = ActiveCell.Row 'PRIMERA FILA ActiveSheet.Unprotect "entrar" TODO EL CODIGO Next i uf = ActiveCell.Row 'SEGUNDA FILA 'rango con lineas verdes de B a N Range("B" & pf & ":N" & uf).Select Call PintaBerde
el problema que encuentro es que me pone el borde solamente en la ultima fila, no desde la primera fila...
saludos cordiales
![fitolink](http://blob.todoexpertos.com/letters/F_151_48.png?v=1)
creo que encontré como solucionarlo a ver que te parece?
pf = Range("B" & Rows.Count).End(xlUp).Row For i = 1 To ReCantidad Range("B7").Select Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Select Loop TODO EL CODIGO DE INGRESO DE DATOS uf = ActiveCell.Row 'formato fila: fuente, 10; letra, tahoma; ancho fila, 13 Range("B" & pf & ":B" & uf).Select Call FormaFila 'negritas columnas B, M-N y U-V Range("B" & pf & ":B" & uf & ",M" & pf & ":N" & uf & ",U" & pf & ":V" & uf).Select Selection.Font.Bold = True 'rango con lineas verdes de B a N Range("B" & pf & ":N" & uf).Select Call PintaBerde 'rango con lineas anaranjado de O a V Range("O" & pf & ":V" & uf).Select Call PintaBanja 'rango de rellenos M a n y de U a V Range("M" & pf & ":N" & uf & ",U" & pf & ":V" & uf).Select Call PintaRellTotal
pero el código de FORMAFILA no me esta funcionando con esto, no esta realizando el formato de la fila
With Rows(ActiveCell.Row) .Font.Size = 10 .Font.Name = "Tahoma" .RowHeight = 13 End With
los bordes, el relleno y la negrita si lo realiza, que se puede hacer?
saludos cordiales
- Compartir respuesta
![](/content/images/user_nophoto_small.png)