Generar tabla dinámica en diferentes archivos

Me encuentro en una situación donde necesito crear una tabla dinámica en otro archivo de excel, ya fui capaz de generar la tabla dinamica; el detalle es que uso diferentes archivos que cambian de nombre, pero mantienen el mismo formato mi pregunta va especificada a si puedo poner el nombre del archivo en una variable y utilizarla desde el SourceData en el código, si cambio el nombre funciona pero me interesa hacerlo de manera automática sin modificar el código

1 respuesta

Respuesta
1
Te estoy enviado dos macros, una para listar los libros abiertos
Y otra para identificar uno a uno una vez listados dichos libros.
Para ello crea una hoja con el nombre LIBROS y en la celda b1 pegas la fórmula
=CONTARA(A:A)+1
luego pegas estos dos modulos y puedes ejecutarlos a la forma que desees.
Sub ListarLibrosAbiertos()
Dim Libros As Object
EsteLibro = ActiveWorkbook.Name
Range("LIBROS!A:A").Clear
For Each Libros In Application.Workbooks
'cargo el nombre de los libros en la hoja LIBROS
Range("LIBROS!A" & Range("LIBROS!B1")) = Libros.Name
Next Libros
Set Libros = Nothing
End Sub
'Recorres libro a libro para tomar su nombre de archivo, y crear la tabla dinamica
Sub LIBRO()
Dim Celda As Range, LIBRO As String
With Worksheets("LIBROS")
For Each Celda In Worksheets("LIBROS").Range("A1:A" & Range("B1"))
LIBRO = Celda
'Aqui podrias cargar el codigo que tienes para crear tu tabla dinamica
'La variable "LIBRO" contiene el nombre del libro que haya recorrido el bucle
End If
Next
End With
End Sub
Espero esto te sirva,
Slds.
Att. Alfredo
Hola experto,
Gracias por tu apoyo, actualmente tengo ya el nombre del archivo en una variable, solo que no me permite utilizar esa variable en el código donde tengo problemas te dejo mi código, especificando donde tengo problemas:
Sub Inventario()
' Ventana de dialogo para seleccionar archivo
On Error GoTo error
Dim intRespuesta As Integer
intRespuesta = MsgBox("¿Seguro que desea insertar los datos del Inventario?", vbQuestion + vbYesNo, "Advertencia") 'messagebox
If intRespuesta = 6 Then
Application.Dialogs(xlDialogOpen).Show '
nombre = ActiveWorkbook.Name 'Se activa el libro seleccionado y lo guardo en una variable
Application.ScreenUpdating = False 'Evitar los movimientos de pantalla
'Se genera tabla dinámica
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"'Inventario25082011 zmxmm_munme '!R1C1:R980C10").CreatePivotTable _
TableDestination:="", TableName:="PivotTable4", DefaultVersion:= _
xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable4").AddFields RowFields:="Material"
ActiveSheet.PivotTables("PivotTable4").PivotFields(" Libre U.en UMA1") _
.Orientation = xlDataField
Donde dice Inventario25082011 zmxmm_munme, ese es el nombre del archivo que va cambiando y no me acepta usar la variable "nombre"
Espero puedas ayudarme, y agradezco de nueva cuenta tu apoyo.
Saludos,
Santiago
Intenta de esta forma y si puedes me envías la forma en como has intentado asignarle la variable.
Sub Inventario()
' Ventana de dialogo para seleccionar archivo
On Error GoTo ERROR
Dim intRespuesta As Integer
intRespuesta = MsgBox("¿Seguro que desea insertar los datos del Inventario?",
vbQuestion + vbYesNo, "Advertencia") 'messagebox
If intRespuesta = 6 Then
Application.Dialogs(xlDialogOpen).Show '
NOMBRE = ActiveWorkbook.Name 'Se activa el libro seleccionado y lo guardo en una variable
Application.ScreenUpdating = False 'Evitar los movimientos de pantalla
'Se genera tabla dinámica
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
NOMBRE.Value).CreatePivotTable _
TableDestination:="", TableName:="PivotTable4", DefaultVersion:= _
xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable4").AddFields RowFields:="Material"
ActiveSheet.PivotTables("PivotTable4").PivotFields(" Libre U.en UMA1") _
.Orientation = xlDataField
End If
ERROR:
End Sub
Ya lo intente utilizando nombre.value, no funcionó.
Igualmente intente de esta manera guardando el nombre de la hoja activa en una variable llamada hoja
Application.Dialogs(xlDialogOpen).Show '
nombre = ActiveWorkbook.Name 'Se activa el libro seleccionado
hoja = ActiveSheet.Name
Application.ScreenUpdating = False 'Evitar los movimientos de pantalla
Call Inicializar 'Inicializar los valores en blanco
'Se genera tabla dinámica
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"hoja!").CreatePivotTable _
TableDestination:="", TableName:="PivotTable4", DefaultVersion:= _
xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable4").AddFields RowFields:="Material"
ActiveSheet.PivotTables("PivotTable4").PivotFields(" Libre U.en UMA1") _
.Orientation = xlDataField
Sigue sin funcionar, solo funciona cuando uso el nombre original de la hoja
Saludos,
Santiago
Creo que el problema esta en que la variable NOMBRE que tienes solo contiene el nombre del libro activo pero no la referencia de hoja y rango al cual debería ir la tabla, habría que buscar la forma de reconocer si bien automáticamente o porque ya este definido que todos los libros contendrán los mismo nombres de hojas; de introducir en la variable la referencia completa.
Vere que puedo hacer te escribo cuando tenga algo con que ayudarte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas