Generar Tablas Dinámicas con Macros

Respuesta de
jgirj
a
Usuario
Hola Amigo... Como estas yo de nuevo con otra pregunta...

Dentro de la Tremenda macro que estoy haciendo del cual tu participas ayudándome, tengo que generar una tabla dinámica, resulta que durante el día genero varias tablas dinámicas y la macro esta editada de la siguiente manera:
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Datos!R46C2:R856C22").CreatePivotTable TableDestination:="", TableName:= _
"Tabla dinámica1"

Si te fijas esta predeterminado "Tabla dinámica1", el numero de la tabla, de este modo cuando genero la macro y anteriormente ya había trabajado con una tabla dinámica, me genera error ya que no coinciden los números,
Yo soluciono el problema siempre reseteando el computador... imagina el cacho... tienes alguna idea de como solucionarlo.
Gracias
Experto
Hola.

La verdad es que tampoco he trabajado nunca con tablas dinámicas, pero debe haber una solución y es posible que entr los dos la encontremos. Hagamos lo siguiente:

Crea un libro nuevo, y en el diseña una tabla dinámica con datos ficticios, no tiene que ser muy grande, envíamela a mi correo (Jgirj7@yahoo.com), para yo ver como es que el computador asigna el nombre

Espero tu correo
Usuario
Dim NombreArch As String
NombreArch = "NP " & InputBox("PROVEEDOR", "Guardar Como...CELTA (Ejemplo)") & " " & InputBox("FECHA", "Guardar Como...30-08-2004 (Ejemplo)") & " " & "VA"
If NombreArch = "" Then

Tengo dos dudas, para termninar este gran proyecto...
(Todo sobre las Tablas Dinámicas, funciono perfecto, tuve que adaptar a mi macro... pero todo bien)

1..-Respecto al ejemplo de más arriba, cuando "guardo como", lo único que tengo que agregarle un VA al final del mismo nombre del archivo, por ejemplo, NP NANA 31-04-04... lo debo "guardar como" NP NANA 31-04-04 VA... la idea es que se "guarde como ", automáticamente.

2.- Cuando en la tabla dinámica, se borra la hoja adicional... me pregunta "desea borrar esta hoja", la idea que no me pregunte en esta ocasión, "SOLO BORRE SIN PREGUNTAR"...

Gracias por tu ayuda...
Experto
Hola, creo que encontré la solución:

En libro de prueba que me enviaste cambia todo el código del módulo por este:

Sub Tabla_Dinamica_prueba()
'
' Tabla_Dinamica_prueba Macro
' Macro grabada el 10/09/2004 por GuKo
'

'
Sheets("Electronica y Otros").Select
Sheets("Electronica y Otros").Copy After:=Sheets(1)
Sheets("Electronica y Otros (2)").Activate
Contar = ActiveWorkbook.Worksheets.Count
NombreHoja = ActiveSheet.Name
NombreTabla = "Tabla dinámica" & Contar - 1
Range("A1").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"'Electronica y Otros (2)'!R1C1:R2C23").CreatePivotTable TableDestination:="", _
TableName:="Tabla dinámica" & Contar - 1
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables(NombreTabla).SmallGrid = False
ActiveSheet.PivotTables(NombreTabla).AddFields RowFields:=Array( _
"Nombre Tienda", "Fecha Boleta", "Boleta"), PageFields:="Desc.Rubro"
ActiveSheet.PivotTables(NombreTabla).PivotFields("Cant").Orientation = _
xlDataField
Application.CommandBars("PivotTable").Visible = False
ActiveSheet.PivotTables(NombreTabla).PivotFields("Desc.Rubro"). _
CurrentPage = "ELECTRONICA"
Cells.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Application.DisplayAlerts = False
Cells.EntireColumn.AutoFit
Range("B9").Select
ActiveSheet.PivotTables(NombreTabla).PivotSelect _
"'Fecha Boleta'[Todas;Total] ELECTRONICA", xlDataAndLabel
Selection.Delete
Range("B12").Select
ActiveSheet.Name = NombreTabla
Sheets(NombreHoja).Select
Worksheets(NombreHoja).Delete
Worksheets(NombreTabla).Activate
Application.DisplayAlerts = True
Range("B16").Select
End Sub


Ya lo ensaye y se pueden generar n hojas.

Si tienes algún problema escribe, de lo contrario no olvides finalizar.

Saludos
Experto
Trabajaré en ello.


El próximo lunes te tendré respuesta

Feliz fin de semana

Saludos
Usuario
Te acabo de enviar el correo...
Chao
Experto
Una idea

Dim NombreTabla as String

NombreTabla=Inputbox("Entre el nombre de la tabla")

Reemplaza "Tabla Dinámica 1" por nombre tabla.

Si no sirve entonces podrías ensayar con
For Each tabla In Hoja1.PivotTables
NombreTabla= tabla.Name
Next tabla

Si no sirve, escribe de nuevo
Usuario
Es necesario que me pregunte por algún nombre, por ejemplo:

Dim NombreTabla as String

NombreTabla= "tabla 1"


De este modo, siempre cuando genere la tabla dinámica buscara el nombre ya predeterminado por mi.

Que crees tu.?
Experto
Eso hace la función inputbox
Te pregunta a que nombre quieres asociar la tabla, entonces como reemplazas en la fórmula "tabla dinámica..." por NombreTabla, el buscara la que tu le indiques.

Si no es suficiente pregunta de nuevo

Saludos
Usuario
Sabes, no resulta, ya que me tira error... la verdad es que no entiendo bien como funciona el nombre que se le da a la tabla dinámica.
El nombre lo predetermina el computador.
Y al utilizar el inputbox, yo le designo el nombre pero esta no me lo reconoce...
Experto
Hola

Para guardar como

Dim NomArch as String
NomArch="NP NANA 31-04-04" & "VA"
ActiveWorkbook.SaveAs("C:Ruta" & NomArch & ".Xls")

Para que no te aprezcan mensajes de alerta:

Application.DisplayAlerts=Flase
' aqui Tu codigo para borrar hoja
Application.DisplayAlertes=True

Si tienes problemas escribe, de lo contrario no olvides finalizar.

Saludos
Experto
¿Hola, Cómo vas?
Usuario
Hola respecto a los mensajes de aprobación, esta ok... Gracias
Pero al respecto de "guardar como" la idea es que el sistema considere el nombre actual del archivo y le agregue automáticamente un VA, al final., es decir, el archivo cada vez que se ejecuta la macro tiene distintos nombres, pero lo único que hay que hacer es "guardar como", con el nombre del archivo actual y agregarle un VA al final...
Usuario
Ojala te hayan llegado mis otras preguntas...
Experto
Corrección:

Hola

Para guardar como

Dim NomArch As String
NomArch = ThisWorkbook.Path & "" & ThisWorkbook.Name & "VA"
ThisWorkbook.SaveAs NomArch

Si no es eso escribe de nuevo
Experto
Hola

Para guardar como

Dim NomArch As String
NomArch = ThisWorkbook.Path & "" & ThisWorkbook.Name & "VA"
ThisWorkbook.SaveAs NomArch

Si no es eso escribe de nuevo