Macro para crear y luego eliminar tabla dinámica

Agradezco si alguien me puede colaborar diciéndome como puedo modificar una macro para que me permita crear una hoja dinámica, seleccionar los datos de esta, pasarlos a otra hoja y luego eliminarlos, modifique el código para que me permita crear la tabla dinámica cada vez que lo necesito, sin embargo no he podido saber como modificarlo para eliminar la tabla, ya que al no encontrar la hoja me sale un error 9, y la eliminar esa fila donde esta el error, me elimina la hoja de donde tengo la información que requiero. Muchas gracias.

La Macro es la siguiente: Al final en negrilla esta la parte que requiere modificar para que me elimine la tabla dinámica, o creo yo que es donde se debe modificar.

Sub Pedido_CR()
'
' Pedido_CR Macro
' Lista los pedidos cliente recoge para seleccionar los que se van a despachar

...
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Cliente Recoge!R4C2:R539C25", Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="", TableName:= _
"Tabla dinámica1", DefaultVersion:=xlPivotTableVersion14
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("numero")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("nombre_cliente")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("fecha_pedido")
.Orientation = xlRowField
.Position = 3
End With
ActiveSheet.PivotTables("Tabla dinámica1").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica1").PivotFields("cantidad_pendiente"), _
"Suma de cantidad_pendiente", xlSum
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE")
.Orientation = xlPageField
.Position = 1
End With
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE"). _
ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE"). _
CurrentPage = "SI"
With ActiveSheet.PivotTables("Tabla dinámica1")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With
Range("A5").Select
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("numero").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
Range("B6").Select
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("nombre_cliente"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
Range("A5:D5").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A5:D76").Select
Selection.Copy
Sheets("Cliente Recoge").Select
ActiveWindow.LargeScroll ToRight:=3
ActiveWindow.SmallScroll ToRight:=-3
Range("AA5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Delete
End Sub

1 respuesta

Respuesta
1

El problema lo tienes porque no sabes si será Hoja1 la que tienes que borrar, puede ser hoja2, hoja3, etc. Para solucionarlo, guarda el nombre de la hoja al crearla y después usa este nombre para seleccionar la hoja, antes de borrarla.

Asi:

Sub Pedido_CR()
'
' Pedido_CR Macro
' Lista los pedidos cliente recoge para seleccionar los que se van a despachar
Sheets.Add
'Guarda el nombre de la hoja creada'
h = ActiveSheet.Name
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Cliente Recoge!R4C2:R539C25", Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="", TableName:= _
"Tabla dinámica1", DefaultVersion:=xlPivotTableVersion14
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("numero")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("nombre_cliente")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("fecha_pedido")
.Orientation = xlRowField
.Position = 3
End With
ActiveSheet.PivotTables("Tabla dinámica1").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica1").PivotFields("cantidad_pendiente"), _
"Suma de cantidad_pendiente", xlSum
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE")
.Orientation = xlPageField
.Position = 1
End With
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE"). _
ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE"). _
CurrentPage = "SI"
With ActiveSheet.PivotTables("Tabla dinámica1")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With
Range("A5").Select
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("numero").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
Range("B6").Select
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("nombre_cliente"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
Range("A5:D5").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A5:D76").Select
Selection.Copy
Sheets("Cliente Recoge").Select
ActiveWindow.LargeScroll ToRight:=3
ActiveWindow.SmallScroll ToRight:=-3
Range("AA5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Seleccionamos la hoja creada'
Sheets(h).Select
'Desactivamos los mensajes para que no muestre el de que se va a borrar una hoja'
Application.DisplayAlerts = False
'Borramos la hoja, he dejado la instrucción que tenías en tu código'
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Delete
'Activamos los mensajes otra vez'
Application.DisplayAlerts = True
End Sub

Si te ha valido la respuesta.

Mejor de esta forma, así ves los comentarios:

Sub Pedido_CR()
' Pedido_CR Macro'
' Lista los pedidos cliente recoge para seleccionar los que se van a despachar'
'Añadimos la hoja'
Sheets.Add
'Guarda el nombre de la hoja creada'
h = ActiveSheet.Name
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Cliente Recoge!R4C2:R539C25", Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="", TableName:= _
"Tabla dinámica1", DefaultVersion:=xlPivotTableVersion14
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("numero")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("nombre_cliente")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("fecha_pedido")
.Orientation = xlRowField
.Position = 3
End With
ActiveSheet.PivotTables("Tabla dinámica1").AddDataField ActiveSheet.PivotTables _
("Tabla dinámica1").PivotFields("cantidad_pendiente"), _
"Suma de cantidad_pendiente", xlSum
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE")
.Orientation = xlPageField
.Position = 1
End With
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE"). _
ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("CLIENTE RECOGE"). _
CurrentPage = "SI"
With ActiveSheet.PivotTables("Tabla dinámica1")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With
Range("A5").Select
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("numero").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
Range("B6").Select
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("nombre_cliente"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
Range("A5:D5").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A5:D76").Select
Selection.Copy
Sheets("Cliente Recoge").Select
ActiveWindow.LargeScroll ToRight:=3
ActiveWindow.SmallScroll ToRight:=-3
Range("AA5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Seleccionamos la hoja creada'
Sheets(h).Select
'Desactivamos los mensajes para que no muestre el de que se va a borrar una hoja'
Application.DisplayAlerts = False
'Borramos la hoja, he dejado la instrucción que tenías en tu código'
Application.CutCopyMode = False
ActiveWindow.SelectedSheets.Delete
'Activamos los mensajes otra vez'
Application.DisplayAlerts = True
End Sub

Marcial muchísimas gracias por tu colaboración, Le di muchas vueltas pero al final me genero la macro sin ningún problema.

Te cuento también que en la solución que me diste solo falto incluir que al crear la tabla dinámica, se debía definir que la tabla de destino era la "n".

De nuevo muchas gracias por tu colaboración tan valiosa y lo pronto que fue la misma! :)

La pregunta no admite más respuestas

Más respuestas relacionadas