在PowerPoint直方图图表中更改图表标题的文本颜色

时间:2018-03-24 13:19:30

标签: vba vsto powerpoint office-interop powerpoint-vba

我正在尝试更改PowerPoint中直方图的图表标题的文本颜色 这是我的工作:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script src="https://willowsystems.github.io/jSignature/js/libs/jSignature.min.js"></script>
<div id="DrawSign-signature" style="border:1px solid black;width:400px;height:160px;">
     </div>

这适用于标准图表,如折线图。但它不适用于直方图,瀑布,树图等其他图表类型。

在这些情况下,设置var colorFormat = chart.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor; colorFormat.RGB = ...; // or colorFormat.ObjectThemeColor = ...; 会将文本设置为黑色。设置ObjectThemeColor实际上设置了正确的颜色。但是,在这两种情况下,只要用户更改选择,文本颜色就会跳回到之前的颜色。

如何设置其中一个图表标题的文字颜色?
我正在使用VSTO和C#,但VBA解决方案同样受欢迎,只要它可以转换为C#并且仍然有效。

3 个答案:

答案 0 :(得分:0)

根据您提供的信息,我在PowerPoint中构建了直方图和瀑布图,并成功使用:

Sub ChartTitleFontColor()
  Dim oShp As Shape
  Dim oCht As Chart

  'Waterfall on slide 1
  Set oShp = ActivePresentation.Slides(1).Shapes(1)
  If oShp.HasChart Then
    Set oCht = oShp.Chart
  End If

  ' Do stuff with your chart
  If oCht.HasTitle Then
    Debug.Print oCht.ChartTitle.Text
    oCht.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(251, 5, 40)
  End If

  'Histogram on slide 2
  Set oShp = ActivePresentation.Slides(2).Shapes(1)
  If oShp.HasChart Then
    Set oCht = oShp.Chart
  End If

  ' Do stuff with your chart
  If oCht.HasTitle Then Debug.Print oCht.ChartTitle.Text
    oCht.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(251, 5, 40)
  End If

  ' Clean up
  Set oShp = Nothing
  Set oCht = Nothing
End Sub

enter image description here

答案 1 :(得分:0)

您的代码在我的测试中有效。我在PowerPoint 2016中创建了两个图表,第一个是瀑布图,第二个是另一个图表。以下代码仅更改标题颜色(文本只是更改它的证明),而不是其他任何内容。我可以选择其他图表而没有任何变化。我在搜索中找不到关于此的错误。或许其余代码中的某些东西正在改变它?

Sub test()
    Dim myPresentation As Presentation
    Set myPresentation = ActivePresentation

    Dim myShape As Shape
    Set myShape = myPresentation.Slides(1).Shapes(1)

    Dim theChart As Chart
    If myShape.HasChart Then
        Set theChart = myShape.Chart

        If theChart.ChartTitle.Text = "This is blue" Then
            theChart.ChartTitle.Text = "This is yellow"
            theChart.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 0)
        Else
            theChart.ChartTitle.Text = "This is blue"
            theChart.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 255, 255)
        End If
    End If
End Sub

答案 2 :(得分:0)

这不是答案,但我认为你应该命名你的对象。 而不是使用

ActivePresentation.Slides(1).Shapes(1)

您可以命名该对象。 enter image description here