Powerpoint 2007-2010 - How to change decimal places for embedded charts
This article is not so about MS Excel however it's indirectly related to. My colleague asked me how to quick change decimal places in embedded charts in the PowerPoint application. I did a little research and I didn't find any solution for PowerPoint 2007 or 2010. I think Powerpoint doesn't have any button for doing that directly from Ribbon so I came up with my own Add-in.
See on the picture bellow for getting overview.
It's embedded chart from MS Excel which is editable after double click or from the Ribbon. Usually, one presentation contains more than 100 embedded charts and updating these charts is semi-automatic. Each quarter, new data are inserted and the source area is changed to match the newest data. The problem come up when user wants to change number of decimal places for a series. The number of decimal places are also dependent on client because each of them prefers different number of decimal places. How does it now is displayed on the next picture bellow
Advanced user can say that the "Linked to source" option can do that the same. Yes that's true, if we select the option then the number of decimal places will be based on number of decimal places in the source worksheet where we have the standard way how change the decimal places. My colleague prefers to change number of decimal places via button on the Ribbon menu because of there are plenty existing charts and also you have to edit source data = open source worksheet for any change.
As you can see, it's necessary to select a serie, then right click, then select "Data Format Label", select tab "Number" and set number of decimal places. For next serie you can use key F4 for repeating the last action but according to my colleague it doesn't work good in the Powerpoint 2010.
So I created an Add-in that changes the number of decimal places in loop according the following logic
Origin format New format
0 0.0
0.0 0.00
0.00 0
The Add-in's function will work only for embedded charts and for all series at once because I wasn't able to get from VBA which serie has been selected. Also an embedded chart has to be selected!
Download the Add-in.
VBA code
Option Explicit
'********************************************************************************
'ChangeDecimalPlaces
'
' Purpose: Changes decimal places for selected shape.
' The selected shape must be a Chart then goes through all series
' and DataLabels and changes decimal places according to the first
' DataLabel in the first serie
'
' Inputs: -none-
'
' Outputs: -none-
'
' Created: 01/26/2011 Premysl Lazecky
'
' Modified: .
'
'********************************************************************************
Sub ChangeDecimalPlaces()
Dim objChart As Chart
Dim objSerie As Series
Dim objLabel As DataLabel
Dim i As Integer
Dim j As Integer
Dim FirstFormat As String
FirstFormat = vbNullString
With Windows(1).Selection
If .Type <> ppSelectionShapes Then
GoTo ExitRoutine
End If
If .ShapeRange.Type <> msoChart And .ShapeRange.Type <> msoPlaceholder Then
GoTo ExitRoutine
End If
Set objChart = .ShapeRange.Item(1).Chart
End With
For i = 1 To objChart.SeriesCollection.Count
Set objSerie = objChart.SeriesCollection(i)
If objSerie.HasDataLabels Then
For j = 1 To objSerie.DataLabels.Count
Set objLabel = objSerie.DataLabels(j)
If Len(FirstFormat) = 0 Then
FirstFormat = objLabel.NumberFormatLocal
End If
Select Case FirstFormat
Case Is = "0"
objLabel.NumberFormatLocal = "0,0"
Case Is = "0,0"
objLabel.NumberFormatLocal = "0,00"
Case Is = "0,00"
objLabel.NumberFormatLocal = "0"
End Select
Select Case FirstFormat
Case Is = "0%"
objLabel.NumberFormatLocal = "0,0%"
Case Is = "0,0%"
objLabel.NumberFormatLocal = "0,00%"
Case Is = "0,00%"
objLabel.NumberFormatLocal = "0%"
End Select
Next j
End If
Next i
ExitRoutine:
Set objChart = Nothing
Set objSerie = Nothing
Set objLabel = Nothing
Exit Sub
ErrorHandler:
Debug.Print "Error Number: " & Err.Number & vbNewLine & "Error Description: " & Err.Description
GoTo ExitRoutine
End Sub