macro para imprimir varias hojas de un libro tomando los nombres desde un indice

6 envíos / 0 nuevos
Último envío
Wilson Alvarez Perez
Imagen de Wilson Alvarez Perez
Offline
última acción: Hace 2 años 6 meses
alta: 27/03/2017 - 13:11
Puntos: 45
macro para imprimir varias hojas de un libro tomando los nombres desde un indice

Buenos dias, necesito de su ayuda para la creacion de una macro que me permita imprimir una serie de hojas de un mismo libro. Los nombres de las hojas se encuentran en un indice que esta en la primera hoja del libro.

Trate de generar el código haciendo uso de la herramienta grabador de macros de excel, pero no hice uso del indice, por lo tanto en el codigo que genera, la linea donde se ubica la selección de las hojas lo hace atraves de un "array" el cual requiere que se le escriba el nombre de las hojas. ¿como modificar esta linea de tal forma que me permita cargar los nombres desde el indice? o ¿que de que otra forma se debe hacer esta macro?

"Sheets(Array("PORTADA EG 6580", "EG 6580", "PORTADA EG 6583", "EG 6583")).Select"

Agradezco su atención y  ayuda.

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 3 horas 21 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 10680
convertir rango de celdas en Array

Para seleccionar varias hojas de una vez, el argumento de Sheets es una matriz de valores, un Array de una dimensión, un vector, que en tu ejemplo contruyes ahí mismo con la función Array y separando con comas

Para tu caso de tener la lista de hojas en unas celdas del libro, se trataría de convertir los valores de esas celdas con los nombres en un array

Puedes asignar directamente un rango a un Array, pero es un array de dos dimensiones, por ejemplo:

Dim miArray() As Variant

miArray = Sheets("hojadondetengaselíndice").Range("B3:B5").Value

 

Sin embargo necesitamos convertirlo en una matriz de una dimensión para que nos funcione

podría ser algo así:

    Dim miArray(), miVector()

    Dim i, elementos

    miArray = Sheets("hojadondetengaselíndice").Range("B3:B5").Value

    elementos = UBound(miArray, 1)

    ReDim miVector(1 To elementos)

    For i = 1 To UBound(miArray, 1)

        miVector(i) = miArray(i, 1)

    Next

    Sheets(miVector).Select

 

 

------
Ya sé Excel, pero necesito más.

Wilson Alvarez Perez
Imagen de Wilson Alvarez Perez
Offline
última acción: Hace 2 años 6 meses
alta: 27/03/2017 - 13:11
Puntos: 45
buenas tardes pacomegia,de

buenas tardes pacomegia,

de antemano muchas gracias por su respuesta. He ejecutado el codigo con los parámetros de mi libro y al llegar a la linea "Sheets(miVector).Select"  devuelve un error de "se ha producido un error 9 en tiempo de ejecución: Subindice fuera del intervalo". A continuación como ejecute el código.

Dim miArray(), miVector()

Dim i, elementos

    miArray = Sheets("indice").Range("A8:A12").Value

        'Range("c8:c12").Value = miArray

    elementos = UBound(miArray, 1)

        'MsgBox (elementos)

    ReDim miVector(1 To elementos)

    For i = 1 To UBound(miArray, 1)

        miVector(i) = miArray(i, 1)

              'MsgBox (miVector(i))

    Next

    'Sheets("indice").Range("d8:h8").Value = miVector

     Sheets(miVector).Select

 

-----------

Agregué unas lineas de código para observar el contenido de las variables.
Gracias por su ayuda.
 
 
 

Wilson Alvarez

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 3 horas 21 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 10680
Comprueba que los nombres de

Comprueba que los nombres de las hojas estén bien escritos en tu índice, exactamente igual que los nombres que hay en las pestañas

Comprueba que no haya espacios de más ni de menos

Que no haya tampoco celda vacías en el índice

 

El error "subindice fuera de intervalo" quiere decir que estás intentando seleccionar una hoja con un nombre que no encuentra entre las hojas existentes en la colección Sheets

 

 

 

------
Ya sé Excel, pero necesito más.

Wilson Alvarez Perez
Imagen de Wilson Alvarez Perez
Offline
última acción: Hace 2 años 6 meses
alta: 27/03/2017 - 13:11
Puntos: 45
Pacomegia muchas gracias, la

Pacomegia muchas gracias, la macro ya funciona como lo esperaba, a continuación el código que he usado:

 

Sub Imprimir()

 

Dim miArray(), miVector()

Dim i, elementos

Dim j As Long

 

Range("A6").Select

Range(Selection, Selection.End(xlDown)).Select

j = Range("A50000").End(xlUp).Row

MsgBox (j)

 

    miArray = Sheets("indice").Range("A6:A" & j).Value

        'Range("c8:c12").Value = miArray

 

    elementos = UBound(miArray, 1)

        'MsgBox (elementos)

 

    ReDim miVector(1 To elementos)

 

    For i = 1 To UBound(miArray, 1)

'For i = 1 To 1

        miVector(i) = miArray(i, 1)

              'MsgBox (miVector(i))

 

    Next

     

    Sheets(miVector).Select

    Sheets(miVector(1)).Activate

 

Application.Dialogs(xlDialogPrinterSetup).Show

'Application.Dialogs(xlDialogPrintPreview).Show

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _

       IgnorePrintAreas:=False

Application.ScreenUpdating = True

    

End Sub

    

Wilson Alvarez

Felix Castillo (no verificado)
Imagen de Felix Castillo
Copiar a otro archivo

Estimado, estoy tratando de hacer algo similar, a diferencia de tu codigo en vez de imprimir quisiera copiar las hojas seleccionas a otro libro; para explicarte un poco estoy trabajando con dos archivos, una base de datos con unos 400 rubros (400hojas) y otro archivo de presupuesto vinculado a la base, quisiera que de la lista de la hoja presupuesto me copiara solo las hojas necesarias desde la base de datos.