【问题标题】:Pie Chart VBA DataLabel Formatting饼图 VBA 数据标签格式
【发布时间】:2018-11-21 00:00:46
【问题描述】:

晚上好,

我被困了几个小时,试图解决我在使用 VBA 格式化图表时遇到的问题。

所以我根据更新图表记录了以下宏以反映我想要的格式。问题是当我再次运行此宏时,我得到“对象'Datalabels'的方法'选择'失败”

Sub UpdateChartFormat()
   ActiveSheet.ChartObjects("Chart 4").Activate
   ActiveChart.SeriesCollection(1).DataLabels.Select
   Selection.ShowPercentage = True
   Selection.Separator = "" & Chr(10) & ""
   ActiveSheet.ChartObjects("Chart 1").Activate
   ActiveChart.SeriesCollection(1).DataLabels.Select
   Selection.ShowPercentage = True
   Selection.ShowValue = False
   ActiveSheet.Range("D32").Select
   End Sub

我真的很感激这方面的一些帮助,我无法在其他地方找到修复程序。

我认为这也可能与系列集合有关,因为图表是动态的,并且系列名称会根据用户选择而变化。

理想情况下,如果可能的话,我希望在不激活图表的情况下将其作为另一个更大宏的一部分运行。

提前致谢!

编辑:

所以现在运行代码没有任何错误,但实际上并没有更新格式 XD

Sub UpdateChartFormat()

With ActiveWorkbook.Sheets("MHFA Summary").ChartObjects("Chart 4").Activate
   With ActiveChart.SeriesCollection(1).DataLabels _
       .ShowPercentage = True
   With ActiveChart.SeriesCollection(1).DataLabels _
       .Separator = "" & Chr(10) & ""
   End With
   End With
End With
With ActiveWorkbook.Sheets("MHFA Summary").ChartObjects("Chart 1").Activate
   With ActiveChart.SeriesCollection(1).DataLabels _
       .ShowPercentage = True
   With ActiveChart.SeriesCollection(1).DataLabels _
       .Separator = "" & Chr(10) & ""
   End With
   End With
End With

结束子

【问题讨论】:

  • 尽量不要使用 select 而使用 with 语句。 With Activesheet.ChartObjects("Chart 4"). SeriesColection(1).Datalabels

标签: excel vba charts formatting


【解决方案1】:

类似这样的:

Sub UpdateChartFormat()

   With ActiveSheet.ChartObjects("Chart 4")
       .Activate
       With .Chart.SeriesCollection(1).DataLabels
           .ShowPercentage = True
           .Separator = "" & Chr(10) & ""
       End With
   End With

   With ActiveSheet.ChartObjects("Chart 1")
        .Activate
        With .Chart.SeriesCollection(1).DataLabels
            .ShowPercentage = True
            .ShowValue = False
        End With
   End With

End Sub

根据https://docs.microsoft.com/en-us/office/vba/api/excel.datalabels.showpercentage

备注 必须先激活图表才能访问数据 以编程方式标记,否则将发生运行时错误。

【讨论】:

  • 谢谢蒂姆。我仍然收到运行时错误“对象'DataLabels'的方法'ShowPercentage'失败。这是在Excel 2007中创建的,这可能是为什么?
  • 参见上面的编辑 - 显然必须先激活图表 - 对我来说是新的...
  • 嗨蒂姆,即使激活了图表,我也会遇到同样的错误....:/非常令人困惑....还有其他想法吗?
  • 图表是否已经显示了数据标签?如果没有,您可能需要先添加它们....
  • 嗨蒂姆,是的,它会自动显示数据标签。我认为这可能是问题,因此引入了 .applydatalabels,没有出现同样的错误,然后尝试了 .hasdatalabels=true,同样的错误。内置一个 if 函数,仅在 Showpercentage 和 ShowValue 不等于我试图将它们更改为的值时才运行对数据标签的更改......同样的错误。
【解决方案2】:

设法使用以下代码创建一个循环,通过遍历每个点将 DataLabels 格式更新为我想要的格式。

Sub FormatDataLabels()
Dim intPntCount As Integer

ActiveSheet.ChartObjects("Chart 4").Activate
With ActiveChart.SeriesCollection(1)
    For intPntCount = 1 To .Points.Count
        .Points(intPntCount).ApplyDataLabels _
            AutoText:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
            ShowValue:=True, ShowPercentage:=True, Separator:="" & Chr(10) & ""
    Next intPntCount
End With
ActiveSheet.ChartObjects("Chart 1").Activate
    With ActiveChart.SeriesCollection(1)
    For intPntCount = 1 To .Points.Count
        .Points(intPntCount).ApplyDataLabels _
            AutoText:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
            ShowValue:=False, ShowPercentage:=True, Separator:="" & Chr(10) & ""
    Next intPntCount
End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多