Error en el código por cambiar el nombre de las hojas

23/08/2005 - 11:49 por Aitor Uranga | Informe spam
Hola, tengo un documento con una macro cuyo código pongo mas abajo, que
funcionaba bien cuando las hojas de documento se llamaban Hoja1, Hoja2,
etc... Pero ahora que he tenido que cambiar el nombre de las hojas a
"Benjamin" "Alevin" "Infantil" "Cadete" me da un error, alguien me puede
ayudar a cambiar el código?

Muchas gracias.

PD: Os explico la función del archivo excell para que lo podais entender
mejor. La hoja contiene una tabla de escolares que han realizado una serie
de actividades, cuando un escolar ha realizado mas de 6, en un campo se le
da el valor "F" (que es Finalista) entonces esta macro tiene que seleccionar
los registros que son finalistas, copiarlos y pegarlos en una nueva hoja,
luego tiene que hacer lo mismo con los de la siguente hoja y pegarlos en la
misma hoja que los anteriores pero debajo de los mismos y asi con todas las
hojas.


Sub prueba()
Dim wksNuevaHoja As Worksheet 'Variable para almacenar la hoja que
creará el código
Dim n As Byte 'Para iterar por las hojas

Application.ScreenUpdating = False 'Para mejorar el rendimiento del
código

For n = 1 To 3 'Se procesarán las hojas Hoja1, Hoja2 y Hoja3

With Worksheets("Hoja" & CStr(n)) 'A partir de esta línea, el . hará
referencia a la hoja
.[C3].AutoFilter 'Crea el autofiltro en la celda C3
.[C3].AutoFilter field:=1, Criteria1:="F" 'Establece la
condición para el autofiltro

.AutoFilter.Range.Offset(1).Resize(.AutoFilter.Range.Rows.Count -
1).SpecialCells(xlCellTypeVisible).Copy 'Copia las filas visibles

If IsError(['Datos filtrados'!IV65536]) Then 'Si no existe la
hoja "Datos filtrados" ...
Set wksNuevaHoja Worksheets.Add(after:=Sheets(Sheets.Count)) '... la crea y la coloca al
final de las existentes en el libro
wksNuevaHoja.Name = "Datos filtrados" 'Pone el nombre de la
hoja
End If

With wksNuevaHoja
.Paste Destination:=.Range("A" & .[A65536].End(xlUp).Row +
1) 'Pega los datos a partir de la 1ª fila libre (dejando la fila 1 para
posibles títulos)
End With

.[C3].AutoFilter 'Quita el autofiltro
End With 'Final del 1er. With

Next n

wksNuevaHoja.[A1].Select 'Selecciona una celda (para "deseleccionar" las
celdas recien copiadas)
Application.ScreenUpdating = True

Set wksNuevaHoja = Nothing 'Vacía el objeto (no es imprescindible, pero
tampoco estorba)
End Sub
 

Leer las respuestas

#1 Juan
23/08/2005 - 14:39 | Informe spam
Hola Aitor

Despues de mirar por encima el codigo lo que se me ocurre es cambiar la
forma de llamar las hojas y dejarte un pequeño problema que me parece que
aparecera

Al cambiar el nombre de las hojas tienes que cambiar la forma de llamarlas
puedes hacerlo asi

With Worksheets("Hoja" & CStr(n)) 'A partir de esta línea, el . hará
referencia a la hoja




Por
With Sheets(n) ' no se si al definir n como byte te dara error?? yo
utilizo integer para los contadores

el problema creo que te surgira cuando intentes crear varias hojas con el
mismo nombre

Set wksNuevaHoja =Worksheets.Add(after:=Sheets(Sheets.Count)) '... la
crea y la coloca al final de las existentes en el libro
wksNuevaHoja.Name = "Datos filtrados" 'Pone el nombre de la hoja





Como opcion podrias crearla al principio e ir cambiando la colunma/fila de
pegado

Si cualquier cosa comentas

Un saludo
Juan

Preguntas similares