none
Condicional en columnas de tabla dinámica con VBA RRS feed

  • Pregunta

  • Hola

    Tengo un problema con mi código, se trata de crear un tabla dinámica con la inserción de columnas condicionadas, pues como lo quiero utilizar en diferentes libros necesito que quede de esta forma.

    La condición es que si en el campo de la tabla, todos sus datos son 0 no se agreguen, si sucede lo contrario, que aparezca en dicha tabla. Mi código es el siguiente 

    Sub TablaDinGral()
    ' Eliminar Hoja (Si Existe)
    On Error Resume Next
    Worksheets("TDG").Delete

    ' Crear Hoja TDG
    Worksheets.Add(Before:=ActiveSheet).Name = "TDG"

    ' Crear Pivot Cache
    Set PCache = ActiveWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, SourceData:="Tabla2")

    ' Crear Tabla Dinámica
    Set TDinamica = PCache.CreatePivotTable( _
    TableDestination:="TDG!R5C1", TableName:="Tabla Dinámica General")

    ' Insertar Origen de Tabla
    With TDinamica.PivotFields("NOMBRE PTA CC")
        .Orientation = xlRowField
        .Position = 1
    End With

    ' Insertar Valores
    If TDinamica.PivotFields("SUELDO2").Value = 0 Then
       TDinamica.PivotFields("SUELDO2").Columns.Delete
    Else
    With TDinamica.PivotFields("SUELDO2")
        .Orientation = xlDataField
        .Position = 1
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "SUELDOS"
    End With
    End If

    If TDinamica.PivotFields("INCENTIVO PRODUCTIVIDAD").Value = 0 Then
       Range("INCENTIVO PRODUCTIVIDAD").Columns.Delete
    Else
    With TDinamica.PivotFields("INCENTIVO PRODUCTIVIDAD")
        .Orientation = xlDataField
        .Position = 2
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "I.P"
    End With
    End If

    If TDinamica.PivotFields("DIAS PENDIENTES").Value = 0 Then
       Range("DIAS PENDIENTES").Columns.Delete
    Else
    With TDinamica.PivotFields("DIAS PENDIENTES")
        .Orientation = xlDataField
        .Position = 3
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "D PEND."
    End With
    End If

    If TDinamica.PivotFields("DIA ADICIONAL").Value = 0 Then
       Range("DIA ADICIONAL").Columns.Delete
    Else
    With TDinamica.PivotFields("DIA ADICIONAL")
        .Orientation = xlDataField
        .Position = 4
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "DIA ADIC"
    End With
    End If

    If TDinamica.PivotFields("BONO DE COMPENSACION").Value = 0 Then
       Range("BONO DE COMPENSACION").Columns.Delete
    Else
    With TDinamica.PivotFields("BONO DE COMPENSACION")
        .Orientation = xlDataField
        .Position = 5
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "B.C"
    End With
    End If

    If TDinamica.PivotFields("HORAS EXTRAS").Value = 0 Then
       Range("HORAS EXTRAS").Columns.Delete
    Else
    With TDinamica.PivotFields("HORAS EXTRAS")
        .Orientation = xlDataField
        .Position = 6
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "H.E"
    End With
    End If

    If TDinamica.PivotFields("RETROACTIVO").Value = 0 Then
       Range("RETROACTIVO").Columns.Delete
    Else
    With TDinamica.PivotFields("RETROACTIVO")
        .Orientation = xlDataField
        .Position = 7
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "RETRO"
    End With
    End If

    If TDinamica.PivotFields("PRIMA DOMINICAL").Value = 0 Then
       Range("PRIMA DOMINICAL").Columns.Delete
    Else
    With TDinamica.PivotFields("PRIMA DOMINICAL")
        .Orientation = xlDataField
        .Position = 8
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "P.D"
    End With
    End If

    If TDinamica.PivotFields("VACACIONES").Value = 0 Then
       Range("VACACIONES").Columns.Delete
    Else
    With TDinamica.PivotFields("VACACIONES")
        .Orientation = xlDataField
        .Position = 9
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "VAC"
    End With
    End If

    If TDinamica.PivotFields("PRIMA VACACIONAL").Value = 0 Then
       Range("PRIMA VACACIONAL").Columns.Delete
    Else
    With TDinamica.PivotFields("PRIMA VACACIONAL")
        .Orientation = xlDataField
        .Position = 10
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "P.VAC"
    End With
    End If

    If TDinamica.PivotFields("PAGO DESCUENTOS IMPROCEDENTES").Value = 0 Then
       Range("PAGO DESCUENTOS IMPROCEDENTES").Columns.Delete
    Else
    With TDinamica.PivotFields("PAGO DESCUENTOS IMPROCEDENTES")
        .Orientation = xlDataField
        .Position = 11
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "DESC IMPRO."
    End With
    End If

    If TDinamica.PivotFields("PREMIO DE ASISTENCIA").Value = 0 Then
       Range("PREMIO DE ASISTENCIA").Columns.Delete
    Else
    With TDinamica.PivotFields("PREMIO DE ASISTENCIA")
        .Orientation = xlDataField
        .Position = 12
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "P.ASIST."
    End With
    End If

    If TDinamica.PivotFields("VALES DE DESPENSA").Value = 0 Then
       Range("VALES DE DESPENSA").Columns.Delete
    Else
    With TDinamica.PivotFields("VALES DE DESPENSA")
        .Orientation = xlDataField
        .Position = 13
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "DESPENSA"
    End With
    End If

    If TDinamica.PivotFields("REINTEGRO ISR PAGADO DE MAS").Value = 0 Then
       Range("REINTEGRO ISR PAGADO DE MAS").Columns.Delete
    Else
    With TDinamica.PivotFields("REINTEGRO ISR PAGADO DE MAS")
        .Orientation = xlDataField
        .Position = 14
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "REINT. ISR"
    End With
    End If

    If TDinamica.PivotFields("AJUSTE DEL NETO5").Value = 0 Then
       Range("AJUSTE DEL NETO5").Columns.Delete
    Else
    With TDinamica.PivotFields("AJUSTE DEL NETO5")
        .Orientation = xlDataField
        .Position = 15
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "AJ NETO P"
    End With
    End If

    If TDinamica.PivotFields("ISPT").Value = 0 Then
       Range("ISPT").Columns.Delete
    Else
    With TDinamica.PivotFields("ISPT")
        .Orientation = xlDataField
        .Position = 16
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "ISPT."
    End With
    End If

    If TDinamica.PivotFields("SUPE Pagado en efectivo").Value = 0 Then
       Range("SUPE Pagado en efectivo").Columns.Delete
    Else
    With TDinamica.PivotFields("SUPE Pagado en efectivo")
        .Orientation = xlDataField
        .Position = 17
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "SUPE"
    End With
    End If

    If TDinamica.PivotFields("IMSS").Value = 0 Then
       Range("IMSS").Columns.Delete
    Else
    With TDinamica.PivotFields("IMSS")
        .Orientation = xlDataField
        .Position = 18
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "IMSS."
    End With
    End If

    If TDinamica.PivotFields("VALES DE DESPENSA DEDU").Value = 0 Then
       Range("VALES DE DESPENSA DEDU").Columns.Delete
    Else
    With TDinamica.PivotFields("VALES DE DESPENSA DEDU")
        .Orientation = xlDataField
        .Position = 19
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "DESPENSA D"
    End With
    End If

    If TDinamica.PivotFields("PENSION ALIMENTICIA").Value = 0 Then
       Range("PENSION ALIMENTICIA").Columns.Delete
    Else
    With TDinamica.PivotFields("PENSION ALIMENTICIA")
        .Orientation = xlDataField
        .Position = 20
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "PENSION"
    End With
    End If

    If TDinamica.PivotFields("CREDITO INFONAVIT").Value = 0 Then
       Range("CREDITO INFONAVIT").Columns.Delete
    Else
    With TDinamica.PivotFields("CREDITO INFONAVIT")
        .Orientation = xlDataField
        .Position = 21
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "INFONA"
    End With
    End If

    If TDinamica.PivotFields("AJUSTE INFONAVIT").Value = 0 Then
       Range("AJUSTE INFONAVIT").Columns.Delete
    Else
    With TDinamica.PivotFields("AJUSTE INFONAVIT")
        .Orientation = xlDataField
        .Position = 22
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "AJ INFONA"
    End With
    End If

    If TDinamica.PivotFields("SEGURO DE INFONAVIT").Value = 0 Then
       Range("SEGURO DE INFONAVIT").Columns.Delete
    Else
    With TDinamica.PivotFields("SEGURO DE INFONAVIT")
        .Orientation = xlDataField
        .Position = 23
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "SEG INFONA"
    End With
    End If

    If TDinamica.PivotFields("FONACOT").Value = 0 Then
       Range("FONACOT").Columns.Delete
    Else
    With TDinamica.PivotFields("FONACOT")
        .Orientation = xlDataField
        .Position = 24
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "FONAC"
    End With
    End If

    If TDinamica.PivotFields("IMPULSO").Value = 0 Then
       Range("IMPULSO").Columns.Delete
    Else
    With TDinamica.PivotFields("IMPULSO")
        .Orientation = xlDataField
        .Position = 25
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "IMPUL"
    End With
    End If

    If TDinamica.PivotFields("GAFETTES").Value = 0 Then
       Range("GAFETTES").Columns.Delete
    Else
    With TDinamica.PivotFields("GAFETTES")
        .Orientation = xlDataField
        .Position = 26
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "GAFFET"
    End With
    End If

    If TDinamica.PivotFields("LENTES").Value = 0 Then
       Range("LENTES").Columns.Delete
    Else
    With TDinamica.PivotFields("LENTES")
        .Orientation = xlDataField
        .Position = 27
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "LENTE"
    End With
    End If

    If TDinamica.PivotFields("SAMS").Value = 0 Then
       Range("SAMS").Columns.Delete
    Else
    With TDinamica.PivotFields("SAMS")
        .Orientation = xlDataField
        .Position = 28
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "MEMB SAMS"
    End With
    End If

    If TDinamica.PivotFields("DESCUENTOS VARIOS").Value = 0 Then
       Range("DESCUENTOS VARIOS").Columns.Delete
    Else
    With TDinamica.PivotFields("DESCUENTOS VARIOS")
        .Orientation = xlDataField
        .Position = 29
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "DESC VAR."
    End With
    End If

    If TDinamica.PivotFields("ABONO PAGO IMPROCEDENTE").Value = 0 Then
       Range("ABONO PAGO IMPROCEDENTE").Columns.Delete
    Else
    With TDinamica.PivotFields("ABONO PAGO IMPROCEDENTE")
        .Orientation = xlDataField
        .Position = 30
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "ABONO PAG IMP"
    End With
    End If

    If TDinamica.PivotFields("AJUSTE DEL NETO").Value = 0 Then
       Range("AJSUTE DEL NETO").Columns.Delete
    Else
    With TDinamica.PivotFields("AJUSTE DEL NETO ")
        .Orientation = xlDataField
        .Position = 31
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "AJ NETO D"
    End With
    End If

    If TDinamica.PivotFields("TOTAL PERCEPCIONES").Value = 0 Then
       Range("TOTAL PERCEPCIONES").Columns.Delete
    Else
    With TDinamica.PivotFields("TOTAL PERCEPCIONES")
        .Orientation = xlDataField
        .Position = 32
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "PERCEP"
    End With
    End If

    If TDinamica.PivotFields("TOTAL DEDUCCIONES").Value = 0 Then
       Range("TOTAL DEDUCCIONES").Columns.Delete
    Else
    With TDinamica.PivotFields("TOTAL DEDUCCIONES")
        .Orientation = xlDataField
        .Position = 33
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "DEDUCC."
    End With
    End If

    If TDinamica.PivotFields("NOMINA ELECTRONICA").Value = 0 Then
       Range("NOMINA ELECTRONICA").Columns.Delete
    Else
    With TDinamica.PivotFields("NOMINA ELECTRONICA")
        .Orientation = xlDataField
        .Position = 34
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "TEF"
    End With
    End If

    If TDinamica.PivotFields("NOMINA EN EFECTIVO").Value = 0 Then
       Range("NOMINA EN EFECTIVO").Columns.Delete
    Else
    With TDinamica.PivotFields("NOMINA EN EFECTIVO")
        .Orientation = xlDataField
        .Position = 35
        .Fuction = xlSum
        .NumberFormat = "#,##0.00"
        .Name = "EFECT"
    End With
    End If
    End Sub


    El problema es que no respeta la condicional y aún estando el campo en 0 aparece en la tabla dinámica, espero me puedan ayudar.

    Gracias 

     
    • Cambiado Enrique M. Montejo viernes, 2 de marzo de 2018 10:25 Programación con VBA mediante objetos de Microsoft Excel.
    jueves, 1 de marzo de 2018 22:33

Todas las respuestas

  • Esta bien que lo hagas por macro pero no puedes hacer los calculos con bucles y antes de dar los formatos darle  un select range ?

    No es tan dificil.

    Ahora usar macros no te la seguridad de que sirvan en todas las versiones 2010,2013,2016 pues

    algunas funciones no estan en versiones anteriores deberias usar los de 2010 si tuvieses estos 3 antes mencionados.


    Si necesitas ayuda sube tu avance de otro modo no puedo ayudarte , Suerte!

    jueves, 1 de marzo de 2018 22:38