正如我在上面的评论中所说,您需要从公式中提取序列范围行。请测试以上经过调整的代码:
Sub Labels_SourceROWS_v2()
Dim p As point, CatValueLength As Variant, dls As DataLabels, length As Long
Dim labelItems As Variant, categoryColorRow As Long
Dim valueColorRow As Long, colIndex As Long, color As Long
Dim valueText As String, percentText As String, startPos As Long
If TypeName(Selection) = "Range" Then MsgBox "You forgot selecting a chart...": Exit Sub
categoryColorRow = 1
With ActiveChart.SeriesCollection(1)
.HasDataLabels = True
'new code lines exgtracting the necesssary variables value:__
valueColorRow = Range(Split(.Formula, ",")(2)).row
categoryColorRow = Range(Split(.Formula, ",")(1)).row
colIndex = Range(Split(.Formula, ",")(1)).column
'____________________________________________________________
With .DataLabels
.ShowValue = True
.ShowCategoryName = True
.Separator = vbLf
.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbBlack
.Format.TextFrame2.TextRange.Font.Bold = False
.NumberFormat = "0,0000"
.Position = xlLabelPositionOutsideEnd
.Font.name = "Calibri"
.Font.size = 10
End With
For Each p In .points
labelItems = Split(p.DataLabel.Text, vbLf)
labelItems(1) = Format(VBA.Replace(labelItems(1), ".", ","), "0.00")
With p.DataLabel.Format.TextFrame2.TextRange
'Load Label with Category and Value:
.Text = labelItems(0) & vbLf & labelItems(1)
startPos = 1
'Category:
length = Len(labelItems(0))
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
End With
colIndex = colIndex + 1
Next
End With
End Sub
请在测试后发送一些反馈