EXCEL - Lista de hojas de un libro, pero sin contar las 4 primeras

Necesito una macro que me genere en la Hoja3 (columna C, a partir de la fila 10) una lista con las hojas del libro.

Pero, quiero que me incluya en la lista sólo las hojas a partir de la Hoja5 (incluida), ya que las 4 primeras hojas no me interesa que aparezcan en el listado.

He intentado algo así pero, no funciona:

Sub ListaHojas()
Dim Rango As Range
Dim Hoja As Worksheet
Set Rango = Sheets(3).Range("C10")
For Each objHoja In ActiveWorkbook.Sheets
    If objHoja.Index > 4 Then
    Rango.Value = Hoja.Name
    Set Rango = Sheets(3).Rango(2, 1)
    End If
Next Hoja
End Sub

2 respuestas

Respuesta
1

Gracias Elsa pero no me sirve ninguna de las 2 opciones:

El problema en la primera es que puede haber hojas que no existan (por ejemplo la 6 o la 7) y la macro da error. Yo creo que en ésta bastaría con incluir una condición Si no existe, pasa a la siguiente, ¿verdad? Aunque tampoco tengo claro cómo hacerla :)

La 2ª es la que usaba antes pero, para este caso no me vale porque el nombre de las hojas cambia. Se trata de hojas que las genera otra macro y les pone el nombre de un proveedor... y claro, los proveedores van cambiando.

He intentado lo siguiente a partir de tu 2ª opción:

Sub ListaHojas()
'x Elsamatilde
'arma lista de hojas excluyendo algunas
x = 10
For Each sh In Sheets
    If sh.Name = "LISTAS" Or sh.Name = "PLAN PLAZA" Or sh.Name = "CONTACTOS" Or sh.Name = "DISTRIBUCION" Then
        Sheets("DISTRIBUCION").Range("C" & x) = Sheets(i).Name
        x = x + 1
    End If
Next sh
End Sub

Pero me da error en la línea:

Sheets("DISTRIBUCION").Range("C" & x) = Sheets(i).Name

¿Se te ocurre cómo modificar alguna de tus 2 soluciones para que funcione?

El otro día me respondiste a una pregunta sobre copiar filas después de aplicar un filtro.

Para solucionar este problema, enfocándolo desde otro punto de vista me valdría algo similar.

Hacer que la macro siguiente tenga en cuenta los valores únicos pero SÓLO de las filas que no están filtradas

Sub ObtenerDatosUnicos()
Dim Arr As Variant, ObjDic As Object, lRow As Long
 nombreplan = "PLAN PLAZA"
 Arr = Sheets(nombreplan).Range("K10:K10000")
 Set ObjDic = CreateObject("Scripting.Dictionary")
  For lRow = 1 To UBound(Arr)
    ObjDic(Arr(lRow, 1)) = 0
  Next
Sheets("DISTRIBUCION").Range("C10").Resize(ObjDic.Count) = WorksheetFunction.Transpose(ObjDic.Keys)
End Sub
Respuesta
1

Podés utilizar esta otra:

Sub listaHojas()
'x Elsamatilde
'arma lista de hojas excluyendo las primeras 4
x = 10
For i = 5 To Sheets.Count
 Sheets("Hoja3").Range("C" & x) = Sheets(i).Name
 x = x + 1
Next i
End Sub

O esta otra cuando sepas el nombre de las hojas que no quieras incluir en el listado:

Sub listaHojas()
'x Elsamatilde
'arma lista de hojas excluyendo algunas
For Each sh In Sheets
    If sh.Name = "Menu" Or sh.Name = "Resumen" Then
        Sheets("Hoja3").Range("C" & x) = Sheets(i).Name
        x = x + 1
    End If
Next sh
End Sub

Si, disculpa, el error fue mío.

Si se tienen que omitir esas hojas se evalúa por <>

Sub ListaHojas()
'x Elsamatilde
'arma lista de hojas excluyendo algunas
x = 10
For Each sh In Sheets
    If sh.Name <> "LISTAS" and sh.Name <> "PLAN PLAZA" and sh.Name <> "CONTACTOS" and sh.Name <> "DISTRIBUCION" Then
        Sheets("DISTRIBUCION").Range("C" & x) = sh.Name
        x = x + 1
    End If
Next sh
End Sub

 Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas