用于在图表上设置标签的Vba代码

时间:2017-03-08 20:53:22

标签: vba excel-vba charts label excel

我遇到以下代码的问题:

Sub newC()
Dim ch As Chart
Dim s As Series
Dim objLabels As DataLabels
Dim objLabel As DataLabel

Range("B65", "I66").Select

Set ch = Charts.Add

ch.ChartTitle = "Prova"
conta = 1
For Each s In ch.SeriesCollection
    s.HasDataLabels = True
    s.Points(conta).DataLabel.Position = xlLeft
    conta = conta + 1

    Set objLabels = s.DataLabels
    For Each objLabel In objLabels
        objLabel.Position = xlLabelPositionLeft
    Next objLabel
Next s
End Sub

设置标签位置时出现问题:

objLabel.Position = xlLabelPositionLeft

它说:

  

dataLabel对象的方法位置失败。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

默认是柱状图,遗憾的是没有xlLabelPositionLeft;鉴于您没有提及图表类型,我将假设您正在处理柱形图。柱形图的唯一有效标签位置是:xlLabelPositionOutsideEnd,xlLabelPositionInsideEnd,xlLabelPositionCenter和xlLabelPositionInsideBase。您可以看到,当您手动右键单击柱形图数据标签,然后选择“格式化数据标签”时,这些是您提供的唯一选择。标签。这显示了这些选项,每个选项旁边都有一个单选按钮,只允许其中一种可能性。

以下内容对我有用:

Sub newC()
  Dim ch As Chart

  Dim rng As Range
  Set rng = Range("B65", "I66")

  Set ch = Charts.Add
  ch.SetSourceData Source:=rng
  ch.HasTitle = True
  ch.ChartTitle.Text = "Prova"

  Dim s As Series
  Dim objLabels As DataLabels
  Dim objLabel As DataLabel
  For Each s In ch.SeriesCollection
      s.HasDataLabels = True
      Set objLabels = s.DataLabels
      For Each objLabel In objLabels
          objLabel.Position = xlLabelPositionInsideBase
      Next objLabel
  Next s

End Sub

这些标签位置可能不是您所希望的。但是话说你可以调整边距对齐以获得接近你想要的东西 - 在你的情况下,通过设置右边距标签对齐将标签移到左边。