Formato de número en tabla dinámica VBA

Tengo una macro que crea una tabla dinámica y funciona perfecto. El único problema está en que no me toma el formato de número que deseo y no encuentro cual puede ser la falla, ya que a pesar de que lo cambio en el código, cuando se genera, el formato de número es el general.

el formato de número que deseo es      .NumberFormat = "#.##0,00;[Rojo]-#.##0,00", así lo coloco y no lo toma. Si hay algo que yo no estoy viendo, por favor me ayudan.

Sub CrearTablaDinamica()
    Dim PCache As PivotCache
    Dim TDinamica As PivotTable
    Dim Reporte As Worksheet, Datos As Worksheet
    Dim PRange As Range
    Dim FinalRow As Long, FinalCol As Long
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set Datos = Worksheets("Datos")
    FinalRow = Datos.Cells(Application.Rows.Count, 1).End(xlUp).Row
    FinalCol = Datos.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    Set PRange = Datos.Cells(1, 1).Resize(FinalRow, FinalCol)
    'Eliminar Hoja TablaDinamica (Si Existe)
    On Error Resume Next
    Worksheets("Reporte de cierre").Delete
    'Crear Hoja TablaDinamica
    Worksheets.Add(after:=Sheets(2)).Name = "Reporte de cierre"
    Set Reporte = Sheets("Reporte de cierre")
    Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)
    Set TDinamica = PCache.CreatePivotTable(Reporte.Range("A1"), TableName:="TablaDinámica")
    With TDinamica.PivotFields("Mes")
        .Orientation = xlPageField
        .Position = 1
    End With
    With TDinamica.PivotFields("Empresa")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With TDinamica.PivotFields("Registro")
     .Orientation = xlRowField
     .Position = 1
    End With
    With TDinamica.PivotFields("Sucursal")
     .Orientation = xlRowField
     .Position = 2
    End With
    With TDinamica.PivotFields("Importe")
     .Orientation = xlDataField
     .Position = 1
     .Function = xlSum
     .NumberFormat = "#.##0,00;[Rojo]-#.##0,00"
    End With
    ActiveWindow.DisplayGridlines = False
    Columns("B:G").Select
    Selection.ColumnWidth = 23.57
    Range("A4:G4").Select
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    With TDinamica
     .HasAutoFormat = False
     .TableStyle2 = "PivotStyleMedium10"
    End With
    Range("B1").Select
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

1 Respuesta

Respuesta
2

Al parecer tiene que estar en inglés el formato:

.NumberFormat = "#.##0,00;[Red]-#.##0,00"


Agregué la instrucción On Error Goto 0, de esa manera se activa nuevamente el control de errores, si ocurre un error el programa se detiene. Con la instrucción On Error Resume Next, el código no se detiene si existe algún error.

Prueba con lo siguiente:

Sub CrearTablaDinamica()
    Dim PCache As PivotCache
    Dim TDinamica As PivotTable
    Dim Reporte As Worksheet, Datos As Worksheet
    Dim PRange As Range
    Dim FinalRow As Long, FinalCol As Long
    '
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    Set Datos = Worksheets("Datos")
    FinalRow = Datos.Cells(Application.Rows.Count, 1).End(xlUp).Row
    FinalCol = Datos.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    Set PRange = Datos.Cells(1, 1).Resize(FinalRow, FinalCol)
    'Eliminar Hoja TablaDinamica (Si Existe)
    On Error Resume Next
    Worksheets("Reporte de cierre").Delete
    On Error GoTo 0
    '
    'Crear Hoja TablaDinamica
    Worksheets.Add(after:=Sheets(1)).Name = "Reporte de cierre"
    Set Reporte = Sheets("Reporte de cierre")
    Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)
    Set TDinamica = PCache.CreatePivotTable(Reporte.Range("A1"), TableName:="TablaDinámica")
    With TDinamica.PivotFields("Mes")
      .Orientation = xlPageField
      .Position = 1
    End With
    With TDinamica.PivotFields("Empresa")
      .Orientation = xlColumnField
      .Position = 1
    End With
    With TDinamica.PivotFields("Registro")
      .Orientation = xlRowField
      .Position = 1
    End With
    With TDinamica.PivotFields("Sucursal")
      .Orientation = xlRowField
      .Position = 2
    End With
    With TDinamica.PivotFields("Importe")
      .Orientation = xlDataField
      .Position = 1
      .Function = xlSum
      .NumberFormat = "#.##0,00;[Red]-#.##0,00"
    End With
    ActiveWindow.DisplayGridlines = False
    Columns("B:G").ColumnWidth = 23.57
    Range("A4:G4").HorizontalAlignment = xlCenter
    With TDinamica
      .HasAutoFormat = False
      .TableStyle2 = "PivotStyleMedium10"
    End With
    '
    Range("B1").Select
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Muchas gracias Dante, tenias razón con lo del termino en ingles, al final aparte del On Error Goto 0 que agregaste, la linea del formato la puse con la coma en los miles y el punto en los decimales para que me diera el formato en mi reporte.

Lo curioso es que yo hice una grabación de la macro para poder agarrar los formatos de los números y en el código me salía así como lo había puesto

Me agrada ayudarte, gra cias por comentar y bienvenida a TodoExpertos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas