# sleeccionar casi todas las hojas de unlibro



## hacmurphy (Feb 28, 2006)

Hola, tengo un libro, mas o menos con 30 hojas. estoy intenetando que con una macro se seleccionen 25 de ellas para poder trabajar en todas a la vez. 
La propiedad Sheets.select, no me sirve, porque selecciona todas las hojas del libro.
y estoy tratando con Worksheets(array(........)).select, pero me da como resultado un error, que me dice que "subscrip out of range"


alguien sabe por que?
                             muchas gracias!!!!


----------



## dumbo40 (Feb 28, 2006)

su gramática es muy mala yo no lo está entendiendo.


----------



## hacmurphy (Mar 2, 2006)

claro, ya se que no me entiende, pero tu tamopco me sacas de duda, muchas gracias y muy amable!


----------



## Greg Truby (Mar 2, 2006)

hacmurphy,

No se preocupe sobre su gramática, le entendí sin problema ninguna.  Bueno estudie el siguiente.  Aquí se ve dos maneras de accessar un grupo de hojas.  En grupo usando la colección ActiveWindow.SelectedSheets o una por una haciendo un aro con For Each ws In xxxx o For x = LBound(a) to UBound(a)

```
Sub MultiSheetActivities()
    Dim i As Long, myArr As Variant
    myArr = Array(1, 3, 5, 7)
    For i = LBound(myArr) To UBound(myArr)
        MsgBox Sheets(myArr(i)).Name
    Next
    Sheets(myArr).Select
    Range("E1:F12").Interior.ColorIndex = 12
    ActiveWindow.SelectedSheets.FillAcrossSheets Range("E3:F8"), xlFillWithFormats
End Sub
```
También vea esta hilera para más plática sobre esta tema.

Ay, casi se me olvida - el error de "subscript out of range" significa que una de las hojas a las cuales está tratando de referir no existe.  Usted puso un nombre o un índice erróneo.

Cordialmente,

Greg

<hr />

Dumbo,

Glass houses and stones, old man. Your one sentence there has more than one error in grammar. :wink:


----------



## dumbo40 (Mar 3, 2006)

There goes my Spanish!


----------



## hacmurphy (Mar 21, 2006)

*no me sale todavia*

hola nuevamente, he vuelto con la problematica de la seleccion de algunas hojas del libro y no puedo con ello!!!

 Lo que me has enviado Greg, está bien, pero no me sirve y no sé como adaptarlo para que me sea útil.

Lo último que intenté es:

Sheets.Select
Worksheets(Array("sheet1", "sheet15", "sheet25")).Deselect

pero me da el error de que el orbjeto no soporta esa propiedad.

En realidad es lo que necesito: seleccionar todas las hojas, excepto estas tres, para luego poder trabajar a la vez en todas las hojas seleccionadas.

       Si a alguien se le ocurre algo... gracias!!!!!


----------



## Greg Truby (Mar 21, 2006)

Hola Ana,

Desafortunadamente _Deselect_ no es un método válido para objetos tipo hoja.  En el VBE imprima la tecla F2 para ver el _Object Browser_ y en la cajita para búsquedas ponga «deselect» y verá que solamente hay un objeto que tiene un método de _Deselect_ que es el gráfico (chart).  Hay que usar _select_ y especificar cuales quiere seleccionar, no se puede hacer de la manera que usted pretende (pero me parece buena idea).

Saludos,


----------



## sakuragy (Mar 22, 2006)

*Re: Seleccionar todas la hojas de un libro.*

Puedes aportar más datos de lo que deseas hacer, en mi opinión quizas te pueda orientar más objetivamente si se que es lo que necesitas hacer al seleccionar todas las hojas.


----------



## hacmurphy (Mar 23, 2006)

*Re: Seleccionar todas la hojas de un libro.*

HOla, gracias por tu interés. lo que necesito, que ya lo hago en otro fichero es cortar y pegar toda la información que hay para que desaparezcan todos los links y me quede solo una foto de las hojas. Pasa que no lo puedo hacer en todas las hojas, porque tengo tres o cuatro hojas que digamos, necesito mantener "vivas", o algo asi. Pero claro, las que necesito cortar y pegar solo valores son un monton y hacerlo hoja por hoja, estando todas protegidas es un clavel!

bueno, a ver si se te ocurre algo.

 graicas


----------



## sakuragy (Mar 23, 2006)

*Re. A ver si te sirve*

Saludos. Espero te sea de utilidad.

Sub workin100()
'Con esto puedes quitar rapidamente el password de las hojas
Dim pass As String
pass = "hola"               'Tu password de las hojas
For Each x In Worksheets    'Bucle para quitar el password
    x.Select
    ActiveSheet.Unprotect pass
Next

'Después a trabajar

For Each hoja In Worksheets
    hoja.Select
        nomb = ActiveSheet.Name
        Select Case nomb
            Case Is = "Hoja1"   'Estas tres hojas son las que no se modifican
            Case Is = "Hoja5"   'Si es necesario puedes agregar otra instruccion case
            Case Is = "Hoja10"  'para agregar tantas hojas como lo desees
            Case Else
               Range("A5").Value = "Este es el espacio para hacer lo que quieras de tus hojas"
        End Select
    Next
'Repites el paso de arriba para volver a proteger lo que quede

For Each y In Worksheets    'Bucle para poner el password
    y.Select
    ActiveSheet.Protect pass
Next

End Sub


----------



## hacmurphy (Feb 28, 2006)

Hola, tengo un libro, mas o menos con 30 hojas. estoy intenetando que con una macro se seleccionen 25 de ellas para poder trabajar en todas a la vez. 
La propiedad Sheets.select, no me sirve, porque selecciona todas las hojas del libro.
y estoy tratando con Worksheets(array(........)).select, pero me da como resultado un error, que me dice que "subscrip out of range"


alguien sabe por que?
                             muchas gracias!!!!


----------



## Greg Truby (Mar 23, 2006)

Usando lo que proveó Sakuragy, solamente un poco más nítido (ojalá que no se ofienda, Sakuragy.  Su código funcionará asi como es y yo no hubría dicho nada, si no fuera por eso de usar _Select_ con las hojas cuando no es necesario - no sé como se dice «pet peeve» en español fuera de decir que ver eso siempre me molesta).<hr />

<SPAN style="color:#00007F">Option</SPAN> <SPAN style="color:#00007F">Explicit</SPAN>

<SPAN style="color:#00007F">Sub</SPAN> PasteValuesInSeveralSheets()
    
    <SPAN style="color:#00007F">Const</SPAN> c_strContrasena <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN> = "hola"
    <SPAN style="color:#00007F">Dim</SPAN> wsTarget <SPAN style="color:#00007F">As</SPAN> Worksheet
    
    <SPAN style="color:#007F00">'// Bucle para quitar el password</SPAN>
    <SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> wsTarget <SPAN style="color:#00007F">In</SPAN> Worksheets
        wsTarget.Unprotect c_strContrasena
    <SPAN style="color:#00007F">Next</SPAN> wsTarget
    
    <SPAN style="color:#007F00">'// Bucle para cambiar fórmulas a valores</SPAN>
    <SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> wsTarget <SPAN style="color:#00007F">In</SPAN> Worksheets
    
        <SPAN style="color:#00007F">Select</SPAN> <SPAN style="color:#00007F">Case</SPAN> wsTarget.Name
                    
        <SPAN style="color:#00007F">Case</SPAN> "Sheet1", "Sheet3", "Sheet8"
                
            <SPAN style="color:#007F00">' (no se hace nada a las hojas estas)</SPAN>
            
        <SPAN style="color:#00007F">Case</SPAN> <SPAN style="color:#00007F">Else</SPAN>

            <SPAN style="color:#00007F">With</SPAN> wsTarget.UsedRange
                .Formula = .Value
            <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
        
        <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Select</SPAN>
    
    <SPAN style="color:#00007F">Next</SPAN> wsTarget
    
    <SPAN style="color:#007F00">'// Bucle para poner el contraseña otra vez</SPAN>
    <SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> wsTarget <SPAN style="color:#00007F">In</SPAN> Worksheets
        wsTarget.Protect Password:=c_strContrasena
    <SPAN style="color:#00007F">Next</SPAN> wsTarget
    
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>


Saludos,


----------



## Greg Truby (Mar 23, 2006)

Actualmente, viéndolo bien, yo hubiera programado así:<hr /><SPAN style="color:#00007F">Option</SPAN> <SPAN style="color:#00007F">Explicit</SPAN>

<SPAN style="color:#00007F">Sub</SPAN> PasteValuesInSeveralSheets()
    
    <SPAN style="color:#00007F">Const</SPAN> c_strContrasena <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN> = "hola"
    <SPAN style="color:#00007F">Dim</SPAN> wsTarget <SPAN style="color:#00007F">As</SPAN> Worksheet

    <SPAN style="color:#007F00">'// Bucle para cambiar fórmulas a valores</SPAN>
    <SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> wsTarget <SPAN style="color:#00007F">In</SPAN> Worksheets
    
        <SPAN style="color:#00007F">Select</SPAN> <SPAN style="color:#00007F">Case</SPAN> wsTarget.Name
                    
        <SPAN style="color:#00007F">Case</SPAN> "Sheet1", "Sheet3", "Sheet8"
                
            <SPAN style="color:#007F00">' (no se hace nada a las hojas estas)</SPAN>
            
        <SPAN style="color:#00007F">Case</SPAN> <SPAN style="color:#00007F">Else</SPAN>

            <SPAN style="color:#00007F">With</SPAN> wsTarget
                .Unprotect c_strContrasena
                <SPAN style="color:#00007F">With</SPAN> .UsedRange
                    .Formula = .Value
                <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
                .Protect c_strContrasena
            <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
        
        <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Select</SPAN>
    
    <SPAN style="color:#00007F">Next</SPAN> wsTarget
    
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>


----------



## hacmurphy (Mar 30, 2006)

hola sak, gracias por tu ayuda, pero no es eso lo que necesito, porque de esa manera, igualmente tengo que poner el  nombre de las 50 hojas que quiero seleccionar, sin colocar el nombre de las que no quiero seleccionar, que son solo tres o cuatro.
Me parece que no se puede hacer, actualmente lo tengo asi, nombrando todas las hojs a seleccionar.
                         de todas formas, agradezco tu ayuda.
                     ana


----------



## Greg Truby (Mar 30, 2006)

Ana,

No creo que usted entendió bien lo que escribió Sakuragy.  Vea las modificaciones que hice y tal vez se vea un poco más claro lo que hizo Sakuragy; no es necesario listar los que sí se va a procesar sino uno puede listar solamente las excepciones.


----------



## sakuragy (Apr 3, 2006)

*Re. Seleccionar todas la hojas de un libro*

Hola Ana.

Primeramente, gracias, Greg por tus modificaciones, solamente soy un newbie.

Segundo, estimada Ana, seguramente pudiste tener alguna confusión con las instrucciones; Explico.


        Select Case wsTarget.Name   'Selecciona las hojas de acuerdo a su nombre

        Case "Sheet1", "Sheet3", "Sheet8"    'Entre comillas, los nombres de las hojas a las cuales no quieres modificar, si bien creo que dijiste alrededor de 4

            ' (no se hace nada a las hojas estas) Por lo mismo no hay codigo

        Case Else    'Para cualquier otra hoja que no sean las que no quieres modificar

            With wsTarget
                .Unprotect c_strContrasena    'Desprotege la hoja
                With .UsedRange                   'Con el rango actual, es decir el que esta en uso.
                    .Formula = .Value              'Cambia formulas a valores
                End With                               'Termina
                .Protect c_strContrasena        'Protege
            End With

        End Select

Espero te aclare un poco más. Saludos, y saludos a Greg, excelente.


----------

