Ayuda con Pivot en VBA

10/05/2007 - 18:20 por Murphy | Informe spam
Saludos a todo el grupo!

Grabe la siguiente Macro:

Lo que hace basicamente es crear una pivot y quitar los totales de los
campos que la componen.

Funciona sin ningun problema, para esa hoja.

Necesito que se ejecute en otras hojas con distintos nombres, me
parece que la clave esta en esta linea: "'Retail 1'!
R1C1:R1679C13").CreatePivotTable TableDestination:="", _, sin embargo
no soy ningun experto.

Como puedo hacer que funcione para otras hojas con distintos
nombres?????; Retail 2, Retail 3, Retail 4, Retail 5, etc, etc. Todas
las hojas tienen los mismos encabezados pero el total de registros es
variable

Gracias por su valiosa ayuda





Sub Macro2()

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:= _
"'Retail 1'!R1C1:R1679C13").CreatePivotTable
TableDestination:="", _
TableName:="Tabla dinámica2",
DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard
TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("ID Retailer")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Año")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Mes")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Semana")
.Orientation = xlRowField
.Position = 4
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("No.
Tienda")
.Orientation = xlRowField
.Position = 5
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Nombre Tienda")
.Orientation = xlRowField
.Position = 6
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("SKU")
.Orientation = xlRowField
.Position = 7
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields( _
"Descripción Producto")
.Orientation = xlRowField
.Position = 7
End With
Range("G4").Select
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields( _
"Descripción Producto")
.Orientation = xlRowField
.Position = 8
End With
ActiveWindow.SmallScroll ToRight:=7
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Ventas U"), "Suma de Ventas
U", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Ventas $"), "Suma de Ventas
$", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Inventario U"), "Suma de
Inventario U", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Inventario $"), "Suma de
Inventario $", xlSum
Range("I3").Select
With ActiveSheet.PivotTables("Tabla dinámica2").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
Range("H4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Descripción Producto"). _
Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, _
False, False)
ActiveWindow.SmallScroll ToRight:=-7
Range("G4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("SKU").Subtotals = Array _
(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("F4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Nombre
Tienda"). _
Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, _
False, False)
Range("E4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("No.
Tienda").Subtotals _
= Array(False, False, False, False, False, False, False,
False, False, False, False, False _
)
Range("D4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Semana").Subtotals = _
Array(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("C4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Mes").Subtotals = Array _
(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("B4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Año").Subtotals = Array _
(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("A4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("ID
Retailer"). _
Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, _
False, False)
Columns("A:L").Select
Columns("A:L").EntireColumn.AutoFit
End Sub

Preguntas similare

Leer las respuestas

#1 Arcano
10/05/2007 - 21:35 | Informe spam
On 10 mayo, 12:20, Murphy wrote:
Saludos a todo el grupo!

Grabe la siguiente Macro:

Lo que hace basicamente es crear una pivot y quitar los totales de los
campos que la componen.

Funciona sin ningun problema, para esa hoja.

Necesito que se ejecute en otras hojas con distintos nombres, me
parece que la clave esta en esta linea: "'Retail 1'!
R1C1:R1679C13").CreatePivotTable TableDestination:="", _, sin embargo
no soy ningun experto.

Como puedo hacer que funcione para otras hojas con distintos
nombres?????; Retail 2, Retail 3, Retail 4, Retail 5, etc, etc. Todas
las hojas tienen los mismos encabezados pero el total de registros es
variable

Gracias por su valiosa ayuda

Sub Macro2()

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:= _
"'Retail 1'!R1C1:R1679C13").CreatePivotTable
TableDestination:="", _
TableName:="Tabla dinámica2",
DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard
TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("ID Retailer")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Año")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Mes")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Semana")
.Orientation = xlRowField
.Position = 4
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("No.
Tienda")
.Orientation = xlRowField
.Position = 5
End With
With ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Nombre Tienda")
.Orientation = xlRowField
.Position = 6
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("SKU")
.Orientation = xlRowField
.Position = 7
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields( _
"Descripción Producto")
.Orientation = xlRowField
.Position = 7
End With
Range("G4").Select
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields( _
"Descripción Producto")
.Orientation = xlRowField
.Position = 8
End With
ActiveWindow.SmallScroll ToRight:=7
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Ventas U"), "Suma de Ventas
U", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Ventas $"), "Suma de Ventas
$", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Inventario U"), "Suma de
Inventario U", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField
ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Inventario $"), "Suma de
Inventario $", xlSum
Range("I3").Select
With ActiveSheet.PivotTables("Tabla dinámica2").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
Range("H4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Descripción Producto"). _
Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, _
False, False)
ActiveWindow.SmallScroll ToRight:=-7
Range("G4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("SKU").Subtotals = Array _
(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("F4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Nombre
Tienda"). _
Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, _
False, False)
Range("E4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("No.
Tienda").Subtotals _
= Array(False, False, False, False, False, False, False,
False, False, False, False, False _
)
Range("D4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Semana").Subtotals = _
Array(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("C4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Mes").Subtotals = Array _
(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("B4").Select
ActiveSheet.PivotTables("Tabla
dinámica2").PivotFields("Año").Subtotals = Array _
(False, False, False, False, False, False, False, False,
False, False, False, False)
Range("A4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("ID
Retailer"). _
Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, _
False, False)
Columns("A:L").Select
Columns("A:L").EntireColumn.AutoFit
End Sub





Haces un ciclo que englobe todo el codigo que tienes,
For i = 1 to 5
'aca va tu codigo
Next i


Reemplaza el nombre de la hoja por

"Retail "& i

ejemplo: .SourceData:= "'Retail "& i '!R1C1:R1679C13".

es una idea..a ver si alguien puede ayudarte más.
Suerte.
Respuesta Responder a este mensaje
#2 Héctor Miguel
13/05/2007 - 06:18 | Informe spam
hola, ?

Grabe la siguiente Macro:
Lo que hace basicamente es crear una pivot y quitar los totales de los campos que la componen.
Funciona sin ningun problema, para esa hoja.
Necesito que se ejecute en otras hojas con distintos nombres, me parece que la clave esta en esta linea:
"'Retail 1'! R1C1:R1679C13").CreatePivotTable TableDestination:="", _, sin embargo no soy ningun experto.
Como puedo hacer que funcione para otras hojas con distintos nombres?????
Retail 2, Retail 3, Retail 4, Retail 5, etc, etc.
Todas las hojas tienen los mismos encabezados pero el total de registros es variable...



existen mas de dos 'detalles' que necesitaras tener en consideracion para poder 'adaptar' la macro a variables 'multiples' [p.e.]

a) la macro crea una TD EN LA HOJA ACTIVA, tomando como origen de datos una hoja 'diferente' ['Retail 1'!, 2, 3, etc.]
si vas a crear varias tablas, segun ['Retail 1'!, 2, 3, etc.] necesitaras tambien ACTIVAR/crear/... una hoja para cada TD
para lo cual, es necesario conocer [+/- exactamente] de cuantos 'origenes' estamos hablando [los 'Retail 1'!, 2, 3, etc.]

b) si cada 'origen' de datos es de 13 columnas pero de un numero de filas 'variable'
podrias usar funciones de 'conversion' de rangos 'A1' a 'R1C1' que tomen [p.e.] el UsedRange o el CurrentRegion de cada 'origen'

c) el nombre que la macro le asigna a la TD ["Tabla dinámica2"] denota que habia/hubo/... una TD anterior ["Tabla dinámica1" ???]

comentas cualquier otro detalle que pudiera haberse 'quedado en el tintero' ?
saludos,
hector.

__ el codigo expuesto __
Sub Macro2()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"'Retail 1'!R1C1:R1679C13").CreatePivotTable TableDestination:="", _
TableName:="Tabla dinámica2", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("ID Retailer")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Año")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Mes")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Semana")
.Orientation = xlRowField
.Position = 4
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("No. Tienda")
.Orientation = xlRowField
.Position = 5
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Nombre Tienda")
.Orientation = xlRowField
.Position = 6
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("SKU")
.Orientation = xlRowField
.Position = 7
End With
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields( _
"Descripción Producto")
.Orientation = xlRowField
.Position = 7
End With
Range("G4").Select
With ActiveSheet.PivotTables("Tabla dinámica2").PivotFields( _
"Descripción Producto")
.Orientation = xlRowField
.Position = 8
End With
ActiveWindow.SmallScroll ToRight:=7
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Ventas U"), "Suma de Ventas U", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Ventas $"), "Suma de Ventas $", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Inventario U"), "Suma de Inventario U", xlSum
ActiveSheet.PivotTables("Tabla dinámica2").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica2").PivotFields("Inventario $"), "Suma de Inventario $", xlSum
Range("I3").Select
With ActiveSheet.PivotTables("Tabla dinámica2").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
Range("H4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Descripción Producto"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveWindow.SmallScroll ToRight:=-7
Range("G4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("SKU").Subtotals = Array _
(False, False, False, False, False, False, False, False, False, False, False, False)
Range("F4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Nombre Tienda"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
Range("E4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("No. Tienda").Subtotals _
= Array(False, False, False, False, False, False, False, False, False, False, False, False _
)
Range("D4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Semana").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
Range("C4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Mes").Subtotals = Array _
(False, False, False, False, False, False, False, False, False, False, False, False)
Range("B4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("Año").Subtotals = Array _
(False, False, False, False, False, False, False, False, False, False, False, False)
Range("A4").Select
ActiveSheet.PivotTables("Tabla dinámica2").PivotFields("ID Retailer"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
Columns("A:L").Select
Columns("A:L").EntireColumn.AutoFit
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida