【问题标题】:VBA Change Data Labels on a Stacked Column chart from 'Value' to 'Series name'VBA 将堆积柱形图上的数据标签从“值”更改为“系列名称”
【发布时间】:2016-03-08 16:58:32
【问题描述】:

我想将堆积柱形图上的数据标签从“值”更改为“系列名称”。

我要编辑的图表:

我已经在互联网上搜索了我能做到的最好的方法,我认为可以做到这一点的唯一方法是使用 VBA。我仍然是 VBA 菜鸟,所以任何帮助都将不胜感激

【问题讨论】:

  • 在图片左侧打开的图表格式对话框中取消选中“值”并选中“系列名称”是否完全符合您的要求? i.imgur.com/Inpf80X.png
  • 出于某种奇怪的原因,您一次只能选择一个标签所以当您更改它时,它只会更改您选择的标签。而且没有办法像这样选择和更改它们

标签: vba excel excel-2016


【解决方案1】:

进入 Excel,我选择要编辑的图表,然后通过转到图表工具 > 添加图表元素 > 数据标签 > 更多数据标签选项来选择所有标签

接下来,我取消选中标签中不需要的任何选项,并在我刚刚打开的对话框中的“标签选项”下选中我想要的选项。

这对我来说很好,但如果它不适合你,或者你出于其他原因想通过 VBA 编辑标签,这个脚本 sn-p 将给定图表的标签设置为系列名称:

Option Explicit

Sub Macro1()
  With ThisWorkbook.Worksheets("Grafar, utvikling").ChartObjects("Graf3").Chart.FullSeriesCollection(2)
    If Not .HasDataLabels Then
      .ApplyDataLabels
    End If
    If Not .DataLabels.ShowSeriesName Then
      .DataLabels.ShowSeriesName = True
    End If
  End With
End Sub

显然,您需要将工作表名称、图表名称等切换为图表中的任何内容 - 应该不难弄清楚,但如果您有任何问题,请随时评论问题,如果你确实有任何问题。

我使用宏记录器创建了宏,然后编辑结果,它通常可以为您尝试执行的任何任务提供一个良好的起点。以我的经验,通过这种方式在 Excel-VBA 中找出对象名称/结构比从头开始找出它更容易。

考虑到上述内容并不能满足您的要求,我怀疑图表中的每一列都是一个系列。要快速显示图表中每个数据系列的SeriesName,请尝试遍历图表中的所有系列:

Sub Macro1()
  Dim se As Series

  For Each se In ThisWorkbook.Worksheets("Grafar, utvikling").ChartObjects("Graf3").Chart.SeriesCollection
    If Not se.HasDataLabels Then
      se.ApplyDataLabels
    End If
    If Not se.DataLabels.ShowSeriesName Then
      se.DataLabels.ShowSeriesName = True
    End If
    If se.DataLabels.ShowValue Then
      se.DataLabels.ShowValue = False
    End If
  Next se

End Sub

【讨论】:

  • 嗨 Eirkdaude 感谢您提供如此详细的回复。这是一个视频,展示了您的两个解决方案所发生的情况。 youtube.com/watch?v=gcjX3dHSF6M 它比我下面的文字更好地解释了发生的事情
  • 使用我转到“图表工具>添加图表元素>数据标签>更多数据标签选项”的第一种方法,它最初添加所有数据标签,并选中“值”和“显示领导线” .当我去更改它们时,无法选择所有数据标签。我只能选择数据中具有相同列的标签。因此,当我选择它们并将它们从“值”更改为“系列”时,只有我能够突出显示的那些我可以更改。 VBA 宏也有类似的结果。它只会更改其中一列数据的数据标签。
  • @JonathanDeWet 我怀疑您的每一列都可能是一个数据系列 - 请参阅我对答案的更新,看看您如何解决这个问题。如果我的回答对您有用,请点赞和/或将其标记为您问题的解决方案。
  • 工作得很好(几乎)。唯一的问题是它同时显示“值”和“系列名称”。我只希望它显示“价值”。 !Example 再次感谢!
  • 为了关闭值,您可以将se.DataLabels.ShowValue = False 之类的内容放入循环中。我相信你可以自己弄清楚最后几个问题:) 供参考:msdn.microsoft.com/en-us/library/office/dn300818.aspx@JonathanDeWet
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多