Insertar fila vacia

19/08/2006 - 23:56 por carlos | Informe spam
Tengo una lista de datos de aproximadamente 6500 filas y deseo escribir una
macro para insertar una fila entre cada uno de los datos. He probado con el
siguiente codigo pero la variable tipo string no almacena todo el rango que
necesito, es decir solo funciona para rangos pequeños y cuando supera los 252
datos aparace un error:

Sub InsertarFilasEnBlanco()

Dim lngFila As Long
Dim cadena As String
Dim hoja As Worksheet
Dim rango As Range
Dim rango2 As Range
Set hoja = ActiveSheet
Set rango2 = ActiveWindow.Selection

dato = hoja.Index 'obtiene el indice de la hoja activa donde estoy
aplicando la macro

f1 = rango2.Row 'fila de inicio del rango seleccionado
f2 = f1 + rango2.Rows.Count - 1 'fila de fin del rango seleccionado

numdatos = f2 - f1 ' número de datos totales




With Worksheets(dato)
' aquí se da el error ya que la cadena se alimenta hasta cumplir 256
caracteres y para el resto de datos no funciona, sirviendo solo para rangos
pequeños
For lngFila = f1 To f2
If WorksheetFunction.CountA(.Rows(lngFila)) <> 0 Then cadena =
cadena & lngFila & ":" & lngFila & ","
Next lngFila

Application.ScreenUpdating = False

.Range(Left(cadena, Len(cadena) - 1)).Insert

Application.ScreenUpdating = True

End With
End Sub



Gracias de antemano por vuestra ayuda

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
20/08/2006 - 07:59 | Informe spam
hola, carlos !

Tengo una lista de datos de aproximadamente 6500 filas y deseo escribir una macro para insertar una fila entre cada uno de los datos.
He probado con el siguiente codigo pero la variable tipo string no almacena todo el rango que necesito
es decir solo funciona para rangos peque#os y cuando supera los 252 datos aparace un error:



1) si hablamos de ~6500 filas, y existen filas donde [por no contener datos] NO se ejecutara la insercion de filas nuevas...
-> independientemente de cuantos caracteres se vayan 'acumulando' a una variable de tipo 'String'...
-> solo se puede 'trabajar' con rangos 'discontinuos' de un maximo de 2048 'areas' [o rangos no contiguos] ;)
[no tengo idea de cuantas 'areas' llegaran a resultar al ir seleccionando 'fila_x_fila' del tipo: 3:3,4:4,5:5,6:6... que usa tu codigo] -?-

2) para este tipo de casos, lo usual/recomendable/... es hacer un bucle 'inverso' e ir insertando las filas donde corresponda [p.e.]
-> modifica de tu codigo el bucle +/- a lo siguiente:

Application.ScreenUpdating = False
For lngFila = f2 To f1 Step -1
If Application.CountA(.Rows(Fila)) Then .Rows(Fila).EntireRow.Insert
Next

y ELIMINA la parte donde hacias el intento por insertar las filas con...
.Range(Left(cadena, Len(cadena) - 1)).Insert

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
Sub InsertarFilasEnBlanco()
Dim lngFila As Long
Dim cadena As String
Dim hoja As Worksheet
Dim rango As Range
Dim rango2 As Range
Set hoja = ActiveSheet
Set rango2 = ActiveWindow.Selection
dato = hoja.Index 'obtiene el indice de la hoja activa donde estoy aplicando la macro
f1 = rango2.Row 'fila de inicio del rango seleccionado
f2 = f1 + rango2.Rows.Count - 1 'fila de fin del rango seleccionado
numdatos = f2 - f1 ' nàºmero de datos totales
With Worksheets(dato)
' aqui se da el error ya que la cadena se alimenta hasta cumplir 256 caracteres y para el resto de datos no funciona [...]
For lngFila = f1 To f2
If WorksheetFunction.CountA(.Rows(lngFila)) <> 0 Then cadena = cadena & lngFila & ":" & lngFila & ","
Next lngFila
Application.ScreenUpdating = False
.Range(Left(cadena, Len(cadena) - 1)).Insert
Application.ScreenUpdating = True
End With
End Sub
Respuesta Responder a este mensaje
#2 Héctor Miguel
20/08/2006 - 08:05 | Informe spam
hola [de nuevo], carlos !

-> una ligera 'fe de erratas' [no estoy acostumbrado a usar las variables con el 'prefijo' de su tipo] :))
cambia mis 'Fila' por tus 'lngFila' :D

Application.ScreenUpdating = False
For lngFila = f2 To f1 Step -1
If Application.CountA(.Rows(lngFila)) Then .Rows(lngFila).EntireRow.Insert
Next



saludos,
hector.
Respuesta Responder a este mensaje
#3 Tinteño sonriente :-)
22/08/2006 - 06:11 | Informe spam
Carlos... un abrazo desde el pie del Volcan Misto-Peru
te sugiero probar esta macro

Dim intFila As Integer
intFila = 2
While Cells(intFila, 1) <> "" Or Cells(intFila + 1, 1) <> "" ' buscando
ultima fila vacia
intFila = intFila + 1
Wend
While intFila > 1 ' Agregando empezando por el ultimo
While Cells(intFila, 1) = "" And intFila > 1
intFila = intFila - 1
Wend
Rows(Trim(Str(intFila)) & ":" & Trim(Str(intFila))).Select
Selection.Insert Shift:=xlDown
intFila = intFila - 1
Wend


"carlos" escribió:

Tengo una lista de datos de aproximadamente 6500 filas y deseo escribir una
macro para insertar una fila entre cada uno de los datos. He probado con el
siguiente codigo pero la variable tipo string no almacena todo el rango que
necesito, es decir solo funciona para rangos pequeños y cuando supera los 252
datos aparace un error:

Sub InsertarFilasEnBlanco()

Dim lngFila As Long
Dim cadena As String
Dim hoja As Worksheet
Dim rango As Range
Dim rango2 As Range
Set hoja = ActiveSheet
Set rango2 = ActiveWindow.Selection

dato = hoja.Index 'obtiene el indice de la hoja activa donde estoy
aplicando la macro

f1 = rango2.Row 'fila de inicio del rango seleccionado
f2 = f1 + rango2.Rows.Count - 1 'fila de fin del rango seleccionado

numdatos = f2 - f1 ' número de datos totales




With Worksheets(dato)
' aquí se da el error ya que la cadena se alimenta hasta cumplir 256
caracteres y para el resto de datos no funciona, sirviendo solo para rangos
pequeños
For lngFila = f1 To f2
If WorksheetFunction.CountA(.Rows(lngFila)) <> 0 Then cadena =
cadena & lngFila & ":" & lngFila & ","
Next lngFila

Application.ScreenUpdating = False

.Range(Left(cadena, Len(cadena) - 1)).Insert

Application.ScreenUpdating = True

End With
End Sub



Gracias de antemano por vuestra ayuda
Respuesta Responder a este mensaje
#4 carlos
24/08/2006 - 02:30 | Informe spam
Muchas gracias por su ayuda

He probado ambas macros y funcionan a la perfección

"Tinteño sonriente :-)" escribió:

Carlos... un abrazo desde el pie del Volcan Misto-Peru
te sugiero probar esta macro

Dim intFila As Integer
intFila = 2
While Cells(intFila, 1) <> "" Or Cells(intFila + 1, 1) <> "" ' buscando
ultima fila vacia
intFila = intFila + 1
Wend
While intFila > 1 ' Agregando empezando por el ultimo
While Cells(intFila, 1) = "" And intFila > 1
intFila = intFila - 1
Wend
Rows(Trim(Str(intFila)) & ":" & Trim(Str(intFila))).Select
Selection.Insert Shift:=xlDown
intFila = intFila - 1
Wend


"carlos" escribió:

> Tengo una lista de datos de aproximadamente 6500 filas y deseo escribir una
> macro para insertar una fila entre cada uno de los datos. He probado con el
> siguiente codigo pero la variable tipo string no almacena todo el rango que
> necesito, es decir solo funciona para rangos pequeños y cuando supera los 252
> datos aparace un error:
>
> Sub InsertarFilasEnBlanco()
>
> Dim lngFila As Long
> Dim cadena As String
> Dim hoja As Worksheet
> Dim rango As Range
> Dim rango2 As Range
> Set hoja = ActiveSheet
> Set rango2 = ActiveWindow.Selection
>
> dato = hoja.Index 'obtiene el indice de la hoja activa donde estoy
> aplicando la macro
>
> f1 = rango2.Row 'fila de inicio del rango seleccionado
> f2 = f1 + rango2.Rows.Count - 1 'fila de fin del rango seleccionado
>
> numdatos = f2 - f1 ' número de datos totales
>
>
>
>
> With Worksheets(dato)
> ' aquí se da el error ya que la cadena se alimenta hasta cumplir 256
> caracteres y para el resto de datos no funciona, sirviendo solo para rangos
> pequeños
> For lngFila = f1 To f2
> If WorksheetFunction.CountA(.Rows(lngFila)) <> 0 Then cadena =
> cadena & lngFila & ":" & lngFila & ","
> Next lngFila
>
> Application.ScreenUpdating = False
>
> .Range(Left(cadena, Len(cadena) - 1)).Insert
>
> Application.ScreenUpdating = True
>
> End With
> End Sub
>
>
>
> Gracias de antemano por vuestra ayuda
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida