INSERTAR FILAS EN BLANCO

23/03/2010 - 17:49 por DANIEL | Informe spam
Hola a todos.
Tengo varios archivos con rangos diferentes que pueden tener desde 50 hasta
500 filas y que inician tambien en filas distintas.

No existen filas en blanco.

Deseo insertar dos filas en blanco cada dos filas y que pueda seleccionar el
rango en el que se insertarán las filas para poder aplicarlo en varios
archivos.

Ojala me pudieran ayudar con un código para hacerlo.

Y aprovechando la ocasión si me pueden recomendar algún libro o manual para
aprender a elaborar códigos de VBA se los agradeceré.

Gracias.

Preguntas similare

Leer las respuestas

#6 JANTHER
24/03/2010 - 00:01 | Informe spam
Esste codigo es para un botón, y esta proramado para MSO 2007
Saludos
J. Antonio Hernández B.


"DANIEL" escribió:



"Héctor Miguel" escribió:

> hola, Daniel !
>
> > Tengo varios archivos con rangos diferentes que pueden tener desde 50 hasta 500 filas y que inician tambien en filas distintas.
> > No existen filas en blanco.
> > Deseo insertar dos filas en blanco cada dos filas y que pueda seleccionar el rango en el que se insertaran las filas
> > para poder aplicarlo en varios archivos...
>
> otra alternativa ("en reversa") con 4 inputboxes para seleccionar:
> - desde cual fila
> - hasta cual fila
> - cuantas se insertan
> - cada cuantas (no se mueven)
>
> Sub Inserta_xFilas_cada_n()
> Dim Fila1 As Integer, FilaX As Integer, xFilas As Byte, nFilas As Byte, _
> x As Integer, Rango As String
> Fila1 = Val(Trim(InputBox("Indica la primer fila donde se insertan nuevas", "")))
> If Fila1 < 1 Then Exit Sub
> FilaX = Val(Trim(InputBox("Indica la ultima fila donde se insertan nuevas", "")))
> If FilaX < 1 Then Exit Sub
> xFilas = Val(Trim(InputBox("Indica el numero de filas a insertar", "")))
> If xFilas < 1 Then Exit Sub
> nFilas = Val(Trim(InputBox("Indica cada cuantas filas se insertan nuevas", "")))
> If nFilas < 1 Then Exit Sub
> Application.ScreenUpdating = False
> For x = FilaX To Fila1 Step -nFilas
> Range("a" & x).Resize(xFilas).EntireRow.Insert
> Next
> End Sub
>
> saludos,
> hector.
>
>
> .
> Gracias a Juan Español, JANTHER y Héctor Miguel por responder.

El código de Juan Español me funcionó pero parcialmente, ya que el rango que
elijo para que me inserte filas, se incrementa con las filas insertadas y
solo inserta hasta la última fila del rango inicial, es decir, por ejemplo si
tengo un rango de la fila 1 a la 20 y quiero que me inserte dos filas cada
dos a partir de la fila 3 lo que hace es insertarme dos filas cada dos pero a
lo que inicialmente estaba hasta la fila 10, a partir de la fila 11 a la 20
queda igual, solo se recorre hacia abajo,
Pero muchísimas gracias por haber repondido.

En el código de JANTHER me aparece un erro de sintaxis, no sé que estoy
haciendo mal si lo copie tal cual.

El código de Héctor Miguel me funcionó a la perfección.

Gracias a todos... saludos.
Respuesta Responder a este mensaje
#7 Héctor Miguel
24/03/2010 - 02:31 | Informe spam
hola, Daniel !

El codigo de Juan Espanol... se incrementa con las filas insertadas y solo inserta hasta la ultima fila del rango inicial ...



situacion que se presenta cuando insertas/eliminas filas/columnas "en avanzada" (hacia adelante) incrementando la cuenta
para estos casos es mejor insertar/eliminar filas/columnas "en reversa" (como en el codigo sugerido)

En el codigo de JANTHER me aparece un erro de sintaxis, no se que estoy haciendo mal si lo copie tal cual.



probablemente, el error de sintaxis se origina por "lineas cortadas" al copiar desde tu lector de noticias (?)
alguna instrucion debio ser "en una sola linea" pero paso "cortada" al pegar en el editor de vba (?)

saludos,
hector.
Respuesta Responder a este mensaje
#8 Juan Español
24/03/2010 - 03:16 | Informe spam
Gracias DANIEL por el "feedback", sería muy conveniente que se practicara
mucho más en este grupo.
Definitivamente creo que la solución de H.M. (como suele ser costumbre) es
la más completa, pero...
Según entiendo yo la cuestión, para que funcione a la perfección me he
permitido darle un par de retoques para que en el caso de que
el número de filas a tratar no sea múltiplo exacto de "cada cuantas filas
insertamos".

Sub Inserta_xFilas_cada_n()
Dim Fila1 As Integer, FilaX As Integer, xFilas As Byte, nFilas As Byte, _
x As Integer, Rango As String
Fila1 = Val(Trim(InputBox("Indica la primer fila donde se insertan
nuevas", "")))
If Fila1 < 1 Then Exit Sub
FilaX = Val(Trim(InputBox("Indica la ultima fila donde se insertan
nuevas", "")))
If FilaX < 1 Then Exit Sub
xFilas = Val(Trim(InputBox("Indica el numero de filas a insertar", "")))
If xFilas < 1 Then Exit Sub
nFilas = Val(Trim(InputBox("Indica cada cuantas filas se insertan nuevas",
"")))
If nFilas < 1 Then Exit Sub
' Hacemos que FilaX corresponda al último "ciclo completo" donde insertar
FilaX = Fila1 + Round((FilaX - Fila1) / nFilas) * nFilas
'Para no insertar nunca filas en la "cabecera" donde comenzamos a insertar
filas
Fila1 = Fila1 + 1
Application.ScreenUpdating = False
For x = FilaX To Fila1 Step -nFilas
Range("a" & x).Resize(xFilas).EntireRow.Insert
Next

End Sub
"DANIEL" escribió en el mensaje de
noticias news:


"Héctor Miguel" escribió:

hola, Daniel !

> Tengo varios archivos con rangos diferentes que pueden tener desde 50
> hasta 500 filas y que inician tambien en filas distintas.
> No existen filas en blanco.
> Deseo insertar dos filas en blanco cada dos filas y que pueda
> seleccionar el rango en el que se insertaran las filas
> para poder aplicarlo en varios archivos...

otra alternativa ("en reversa") con 4 inputboxes para seleccionar:
- desde cual fila
- hasta cual fila
- cuantas se insertan
- cada cuantas (no se mueven)

Sub Inserta_xFilas_cada_n()
Dim Fila1 As Integer, FilaX As Integer, xFilas As Byte, nFilas As Byte,
_
x As Integer, Rango As String
Fila1 = Val(Trim(InputBox("Indica la primer fila donde se insertan
nuevas", "")))
If Fila1 < 1 Then Exit Sub
FilaX = Val(Trim(InputBox("Indica la ultima fila donde se insertan
nuevas", "")))
If FilaX < 1 Then Exit Sub
xFilas = Val(Trim(InputBox("Indica el numero de filas a insertar",
"")))
If xFilas < 1 Then Exit Sub
nFilas = Val(Trim(InputBox("Indica cada cuantas filas se insertan
nuevas", "")))
If nFilas < 1 Then Exit Sub
Application.ScreenUpdating = False
For x = FilaX To Fila1 Step -nFilas
Range("a" & x).Resize(xFilas).EntireRow.Insert
Next
End Sub

saludos,
hector.


.
Gracias a Juan Español, JANTHER y Héctor Miguel por responder.



El código de Juan Español me funcionó pero parcialmente, ya que el rango
que
elijo para que me inserte filas, se incrementa con las filas insertadas y
solo inserta hasta la última fila del rango inicial, es decir, por ejemplo
si
tengo un rango de la fila 1 a la 20 y quiero que me inserte dos filas cada
dos a partir de la fila 3 lo que hace es insertarme dos filas cada dos
pero a
lo que inicialmente estaba hasta la fila 10, a partir de la fila 11 a la
20
queda igual, solo se recorre hacia abajo,
Pero muchísimas gracias por haber repondido.

En el código de JANTHER me aparece un erro de sintaxis, no sé que estoy
haciendo mal si lo copie tal cual.

El código de Héctor Miguel me funcionó a la perfección.

Gracias a todos... saludos.
Respuesta Responder a este mensaje
#9 Héctor Miguel
24/03/2010 - 04:09 | Informe spam
hola, Juan !

... para que funcione a la perfeccion... un par de retoques para que
en el caso de que el numero de filas a tratar no sea multiplo exacto de "cada cuantas filas insertamos"...



creo que hablamos de lo mismo (y hasta donde se...) de que cuando en un bucle...
el siguiente proceso queda "fuera del rango/alcance/ciclo/..." (indicado por el Step) ya no se ejecuta (???)

claro que siempre existe la posibilidad de que el usuario no indique algun "multiplo exacto" (para este caso)
pero eso no significa que el proceso NO se haya ejecutado (exactamente) como se le indico (no ?)

saludos,
hector.
Respuesta Responder a este mensaje
#10 DANIEL
24/03/2010 - 19:41 | Informe spam
Muchas gracias nuevamente

Apliqué el código de Juan Español y funciona a la perfección.
Con respecto a lo que comentaba que no me había funcionado el código de
JANTHER, revisé bien como se copiaba en el módulo y efectivamente como lo
mencionaba Héctor Miguel, me copiaba "lineas cortadas" y además no sé porqué
además se adicionaban comillas que no estaban en el código original, lo
revisé bien línea por línea y funciona a la perfección, así que una disculpa
a JANTHER...

Alguna sugerencia para que no me suceda lo anterior aparte de revisarlo
exhaustivamente ?

Saludos...




"Héctor Miguel" escribió:

hola, Juan !

> ... para que funcione a la perfeccion... un par de retoques para que
> en el caso de que el numero de filas a tratar no sea multiplo exacto de "cada cuantas filas insertamos"...

creo que hablamos de lo mismo (y hasta donde se...) de que cuando en un bucle...
el siguiente proceso queda "fuera del rango/alcance/ciclo/..." (indicado por el Step) ya no se ejecuta (???)

claro que siempre existe la posibilidad de que el usuario no indique algun "multiplo exacto" (para este caso)
pero eso no significa que el proceso NO se haya ejecutado (exactamente) como se le indico (no ?)

saludos,
hector.


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida