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.
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.
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
-----------
Wilson Alvarez
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.
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
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.