Autofill de la ultima linea en grupo de hojas

08/08/2006 - 18:10 por martin | Informe spam
Hola a todos. A ver si se puede simplificar un poco esto.

Tengo un libro excel con 25 hojas. Cada hoja tiene a su vez 158 columnas.
El caso es que tengo una macro que me traslada datos de un libro externo
a las cuatro primeras hojas de este mediante una macro de copiar y pegar
en la ultima fila vacia:


Sheets("extern").Select
Range("E7:E132").Select
Selection.Copy

Windows("sisele.xls").Activate
Sheets("hoja1").Select

Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True


Y asi con la hoja 2, 3 y 4.

La ultima fila de las restantes 21 hojas (hasta 25) se calcula a partir
de esas. Antes lo hacia seleccionado el grupo, la fila y haciendo
autorrellenar para todas. Despues hice una macro que viene a ser:

With Sheets("distancia1")
Set rng = .Cells(.Rows.Count, "B"). _
End(xlUp).Resize(, 158)
End With
rng.AutoFill rng.Resize(2)

Y asi distancia2, 3 ,4 y hasta la hoja 25.

Lo que quiero saber es si hay alguna forma de simplificar el asunto

poniendo algo como

With Sheets("distancia1", "distancia2","distancia3",distancia4 etc etc)

Set rng = .Cells(.Rows.Count, "B"). _
End(xlUp).Resize(, 158)
End With
rng.AutoFill rng.Resize(2)


de manera que el autofill de todas las hojas quede agrupado.


Gracias por adelantado.


Salu2. Martin.
 

Leer las respuestas

#1 Héctor Miguel
09/08/2006 - 05:17 | Informe spam
hola, martin !

1) no se si te convenga usar el 'autofill'... o hacer un 'copiar-pegar' [dependera de si tienes 'series' o 'autorellenos'] -?-
2) para que los rangos [y hojas] resultantes queden seleccionados... sera necesario 'trabajar' sobre objetos -> seleccionados :))
3) si tienes una 'serie de instrucciones' para cada una de las hojas... podrias sustituirlas por un solo bucle 'for...next' -?-
4) para la segunda macro que necesitas [la del autofill] prueba con las siguientes alternativas

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

op1: recorrer las hojas [se asume una secuencia numerada sobre un nombre 'base' comun] SIN seleccionar el grupo resultante...
Sub Macro1()
Dim Sig As Byte
For Sig = 1 To 25
With Worksheets("distancia" & Sig).Range("b" & Rows.Count).End(xlUp).Resize(, 158)
.AutoFill .Resize(2)
' .Copy .Resize(2)
End With
Next
End Sub

op2: agrupar primero las hojas 'afectables' y hacer el autorrelleno/copiado despues...
Sub Macro1()
Dim Sig As Byte
Worksheets("distancia1").Select
For Sig = 2 To 25
Worksheets("distancia" & Sig).Select False
Next
Range("b" & Rows.Count).End(xlUp).Resize(, 158).Select
Selection.AutoFill Selection.Resize(2)
Selection.Resize(2).Select
End Sub

op3: [seguramente] existiran mas alternativas [si comentas o faltaran detalles adicionales] :D

__ la consulta original __
... si se puede simplificar un poco esto... 25 hojas... 158 columnas
... tengo... macro que... traslada datos... a las cuatro primeras hojas... mediante... copiar y pegar en la ultima fila vacia:
Sheets("extern").Select
Range("E7:E132").Select
Selection.Copy
Windows("sisele.xls").Activate
Sheets("hoja1").Select
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Y asi con la hoja 2, 3 y 4.
La ultima fila de las restantes 21 hojas (hasta 25) se calcula a partir de esas.
Antes lo hacia seleccionado el grupo, la fila y haciendo autorrellenar para todas. Despues hice una macro que viene a ser:
With Sheets("distancia1")
Set rng = .Cells(.Rows.Count, "B"). _
End(xlUp).Resize(, 158)
End With
rng.AutoFill rng.Resize(2)
Y asi distancia2, 3 ,4 y hasta la hoja 25.
Lo que quiero saber es si hay alguna forma de simplificar el asunto poniendo algo como
With Sheets("distancia1", "distancia2","distancia3",distancia4 etc etc)
Set rng = .Cells(.Rows.Count, "B"). _
End(xlUp).Resize(, 158)
End With
rng.AutoFill rng.Resize(2)
de manera que el autofill de todas las hojas quede agrupado.

Preguntas similares