我有一张带有曲线的excel图表。曲线表示股票的价格取决于时间(所以基本上我有一个完整的日期列和B列的价格和图表)。
现在,对于图表中的每个点,都有一个数据标签文本,如下所示
Charts("CHART").SeriesCollection(1).Points(Numpoint).DataLabel.Text = numcomptagesetup & vbCrLf & numcomptagecountdown
“numpoint”是从第1点到最后一个的变量。 “numcomptagesetup”和“numcomptagecountdown”是“numcomptagesetup”从1到6的值,“numcomptagecountdown”从1到15的值。
上面的代码是写“numcomptagesetup”然后跳两行然后写“numcomptagecountdown”
根据2个信号,我需要的是将绿色或红色的“numcomptagesetup”颜色改为绿色和红色的“numcomptagecountdown”颜色。所以在某些情况下,我需要在同一个datalabeltext中有两种不同的颜色。
我已经写过这个循环并且至少在开始时(逐步方法)起作用然后一切都改变了,颜色不在好的位置(红色而不是绿色或相反)......真的很奇怪 默认情况下,所有点都是绿色,然后我在需要时将点的颜色更改为红色:
For numpoint=1 to 100
With Charts("CHART").SeriesCollection(1).Points(Numpoint)
.HasDataLabel = True
.DataLabel.Text = numcomptagesetup & vbCrLf & numcomptagecountdown
.DataLabel.Font.Size = 6
.DataLabel.Font.Color = vbRed
.MarkerSize = 5
End With
If Signal = 2 Then Charts("CHART").SeriesCollection(1).DataLabels.Select
With Charts("CHART").SeriesCollection(1).Points(Numpoint).DataLabel.Format.TextFrame2.TextRange.Characters(1, 3).Font.Fill
.Visible = msoTrue
.ForeColor
.RGB = RGB(0, 176, 80) .Solid
End With
End If
If Signal2 = 2 Then
Charts("CHART").SeriesCollection(1).DataLabels.Select
With Charts("CHART").SeriesCollection(1).Points(Numpoint).DataLabel.Format.TextFrame2.TextRange.Characters(4, 1).Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Solid
End With
End If
我希望你理解我的问题!如果不是,你可以问,我会尽快回答
谢谢!
答案 0 :(得分:2)
我很难过。即便是宏录制器也会给我类似于你的代码,但是当我运行它时,颜色会应用于Series.DataLabels中的所有数据标签。
我有一个可能的解决方法,即将TextBox形状添加到图表中,并将它们直接放在数据标签的顶部。然后,删除最后的数据标签。
'## This is from your original code:
For numpoint=1 to 100
With Charts("CHART").SeriesCollection(1).Points(Numpoint)
.HasDataLabel = True
.DataLabel.Text = numcomptagesetup & vbCrLf & numcomptagecountdown
.DataLabel.Font.Size = 6
.DataLabel.Font.Color = vbRed
.MarkerSize = 5
End With
Next
'## Now, I make some changes:
Dim srs As Series
Dim dl As DataLabel
Dim dlText As String
Set srs = Charts("CHART").SeriesCollection(1) '## I find it easier to work with objects, so I use variable "srs"
'## Delete any textboxes that might be leftover from previous.
For Each shp In cht.Shapes
shp.Delete
Next
For Each dl In srs.DataLabels '## object-oriented programming, use a DataLabel object variable :
dlText = dl.Caption
'## Add a textbox to overlay the datalabel
Set tb = cht.Shapes.AddTextbox(msoTextOrientationHorizontal, dl.Left, dl.Top, dl.Width, dl.Height)
With tb.TextFrame2
.VerticalAnchor = msoAnchorMiddle
.WordWrap = msoFalse
.AutoSize = msoAutoSizeShapeToFitText
With .TextRange
.Text = dlText
.Font.Size = dl.Format.TextFrame2.TextRange.Font.Size
'## Apply character color format to the textbox:
If Signal = 2 Then
With .Characters(, 3).Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Solid
End With
End If
'## Apply character color format to the textbox:
If Signal2 = 2 Then
With .Characters(4, 1).Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Solid
End With
End If
End With
End With
Next
'## Finally, turn off the datalabels that you don't need anymore.
srs.HasDataLabels = False
答案 1 :(得分:0)
我想出了别的东西:
With ChartObj.Chart.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Characters.Font.fill
.TwoColorGradient msoGradientDiagonalUp, 1
.GradientAngle = 45
.GradientStops(1).Position = 0 '.2
.GradientStops(2).Position = 1 '0.8
.ForeColor.RGB = RGB(0, 0, 0)
.BackColor.RGB = RGB(255, 255, 255)
End With
给我一个数据标签的渐变颜色。