The following code colors the chart data labels according to the categories and values arranged in two rows.
- row 1 = category
- row 2 = value
How do you make the code work for data arranged in two columns?
- column A = category
- column B = value
Replacing
<code>Dim categoryColorRow As Long
Dim valueColorRow As Long
categoryColorRow = 1
valueColorRow = 2
colIndex = 2
With p.DataLabel.Format.TextFrame2.TextRange
color = ActiveSheet.Cells(categoryColorRow, colIndex).Font.color
End With
</code>
<code>Dim categoryColorRow As Long
Dim valueColorRow As Long
categoryColorRow = 1
valueColorRow = 2
colIndex = 2
With p.DataLabel.Format.TextFrame2.TextRange
color = ActiveSheet.Cells(categoryColorRow, colIndex).Font.color
End With
</code>
Dim categoryColorRow As Long
Dim valueColorRow As Long
categoryColorRow = 1
valueColorRow = 2
colIndex = 2
With p.DataLabel.Format.TextFrame2.TextRange
color = ActiveSheet.Cells(categoryColorRow, colIndex).Font.color
End With
with
<code>Dim categoryColorCol As Long
Dim valueColorCol As Long
categoryColorCol = 1
valueColorCol = 2
colIndex = 2
With p.DataLabel.Format.TextFrame2.TextRange
color = ActiveSheet.Cells(categoryColorCol, colIndex).Font.color
End With
</code>
<code>Dim categoryColorCol As Long
Dim valueColorCol As Long
categoryColorCol = 1
valueColorCol = 2
colIndex = 2
With p.DataLabel.Format.TextFrame2.TextRange
color = ActiveSheet.Cells(categoryColorCol, colIndex).Font.color
End With
</code>
Dim categoryColorCol As Long
Dim valueColorCol As Long
categoryColorCol = 1
valueColorCol = 2
colIndex = 2
With p.DataLabel.Format.TextFrame2.TextRange
color = ActiveSheet.Cells(categoryColorCol, colIndex).Font.color
End With
does not work.
This is the whole routine, it works perfectly for rows:
<code>Sub ChartDataLabels(control As IRibbonControl)
Dim p As Point
Dim CatValueLength As Variant
Dim dls As DataLabels
Dim length As Long
Dim labelItems As Variant
Dim categoryColorRow As Long
Dim valueColorRow As Long
Dim colIndex As Long
Dim color As Long
Dim valueText As String
Dim percentText As String
Dim startPos As Long
categoryColorRow = 1
valueColorRow = 2
colIndex = 2
With ActiveChart.SeriesCollection(1)
.HasDataLabels = True
With .DataLabels
.ShowValue = True
.ShowCategoryName = True
.ShowPercentage = True
.Separator = vbLf
.Format.TextFrame2.TextRange.Font.Bold = False
.NumberFormat = "#.##0,00;- #.##0,00"
.Position = xlLabelPositionBestFit
.Font.Name = "Arial Narrow"
.Font.Size = 8
End With
For Each p In .Points
labelItems = Split(p.DataLabel.Text, vbLf)
labelItems(1) = Format(Replace(labelItems(1), ".", ","), "0.00")
labelItems(2) = Format(Replace(labelItems(2), ".", ","), "0.00%")
With p.DataLabel.Format.TextFrame2.TextRange
'load datalabel
.Text = labelItems(0) & vbLf & labelItems(1) & vbLf & labelItems(2)
startPos = 1
length = Len(labelItems(0)) 'Category
color = ActiveSheet.Cells(categoryColorRow, colIndex).Font.color
.Characters(startPos, length).Font.Bold = True
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
'Value
color = ActiveSheet.Cells(valueColorRow, colIndex).Font.color
startPos = startPos + length + 1
length = Len(labelItems(1))
.Characters(startPos, length).Font.Bold = True
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
'Percentage
color = ActiveSheet.Cells(valueColorRow, colIndex).Font.color
startPos = startPos + length + 1
length = Len(labelItems(2))
.Characters(startPos, length).Font.Bold = False
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
End With
colIndex = colIndex + 1
Next
End With
End If
End Sub
</code>
<code>Sub ChartDataLabels(control As IRibbonControl)
Dim p As Point
Dim CatValueLength As Variant
Dim dls As DataLabels
Dim length As Long
Dim labelItems As Variant
Dim categoryColorRow As Long
Dim valueColorRow As Long
Dim colIndex As Long
Dim color As Long
Dim valueText As String
Dim percentText As String
Dim startPos As Long
categoryColorRow = 1
valueColorRow = 2
colIndex = 2
With ActiveChart.SeriesCollection(1)
.HasDataLabels = True
With .DataLabels
.ShowValue = True
.ShowCategoryName = True
.ShowPercentage = True
.Separator = vbLf
.Format.TextFrame2.TextRange.Font.Bold = False
.NumberFormat = "#.##0,00;- #.##0,00"
.Position = xlLabelPositionBestFit
.Font.Name = "Arial Narrow"
.Font.Size = 8
End With
For Each p In .Points
labelItems = Split(p.DataLabel.Text, vbLf)
labelItems(1) = Format(Replace(labelItems(1), ".", ","), "0.00")
labelItems(2) = Format(Replace(labelItems(2), ".", ","), "0.00%")
With p.DataLabel.Format.TextFrame2.TextRange
'load datalabel
.Text = labelItems(0) & vbLf & labelItems(1) & vbLf & labelItems(2)
startPos = 1
length = Len(labelItems(0)) 'Category
color = ActiveSheet.Cells(categoryColorRow, colIndex).Font.color
.Characters(startPos, length).Font.Bold = True
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
'Value
color = ActiveSheet.Cells(valueColorRow, colIndex).Font.color
startPos = startPos + length + 1
length = Len(labelItems(1))
.Characters(startPos, length).Font.Bold = True
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
'Percentage
color = ActiveSheet.Cells(valueColorRow, colIndex).Font.color
startPos = startPos + length + 1
length = Len(labelItems(2))
.Characters(startPos, length).Font.Bold = False
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
End With
colIndex = colIndex + 1
Next
End With
End If
End Sub
</code>
Sub ChartDataLabels(control As IRibbonControl)
Dim p As Point
Dim CatValueLength As Variant
Dim dls As DataLabels
Dim length As Long
Dim labelItems As Variant
Dim categoryColorRow As Long
Dim valueColorRow As Long
Dim colIndex As Long
Dim color As Long
Dim valueText As String
Dim percentText As String
Dim startPos As Long
categoryColorRow = 1
valueColorRow = 2
colIndex = 2
With ActiveChart.SeriesCollection(1)
.HasDataLabels = True
With .DataLabels
.ShowValue = True
.ShowCategoryName = True
.ShowPercentage = True
.Separator = vbLf
.Format.TextFrame2.TextRange.Font.Bold = False
.NumberFormat = "#.##0,00;- #.##0,00"
.Position = xlLabelPositionBestFit
.Font.Name = "Arial Narrow"
.Font.Size = 8
End With
For Each p In .Points
labelItems = Split(p.DataLabel.Text, vbLf)
labelItems(1) = Format(Replace(labelItems(1), ".", ","), "0.00")
labelItems(2) = Format(Replace(labelItems(2), ".", ","), "0.00%")
With p.DataLabel.Format.TextFrame2.TextRange
'load datalabel
.Text = labelItems(0) & vbLf & labelItems(1) & vbLf & labelItems(2)
startPos = 1
length = Len(labelItems(0)) 'Category
color = ActiveSheet.Cells(categoryColorRow, colIndex).Font.color
.Characters(startPos, length).Font.Bold = True
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
'Value
color = ActiveSheet.Cells(valueColorRow, colIndex).Font.color
startPos = startPos + length + 1
length = Len(labelItems(1))
.Characters(startPos, length).Font.Bold = True
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
'Percentage
color = ActiveSheet.Cells(valueColorRow, colIndex).Font.color
startPos = startPos + length + 1
length = Len(labelItems(2))
.Characters(startPos, length).Font.Bold = False
.Characters(startPos, length).Font.Fill.ForeColor.RGB = color
End With
colIndex = colIndex + 1
Next
End With
End If
End Sub