如何在Shapes()中引用图表标题?

时间:2016-01-27 19:08:48

标签: excel vba excel-vba

我想根据工作表中的一些现有数据在新选项卡中格式化图表。我可以使用“另存为模板”来记录模式,但我想创建一个每次都创建相同格式的宏。但是,我在参考图表时遇到了一些问题。这是我的代码。

Sub Macro1()
    Dim GraphTab As Object
    Set GraphTab = ActiveSheet

   'Change everything to Times New Roman
    With ActiveSheet.Shapes(GraphTab).TextFrame2.TextRange.Font
        .NameComplexScript = "Times New Roman"
        .NameFarEast = "Times New Roman"
        .Name = "Times New Roman"
        .Size = 10
    End With
End Sub

我收到从此行With ActiveSheet.Shapes(GraphTab).TextFrame2.TextRange.Font开始的错误消息。

理想情况下,我还希望每次手动更改选项卡名称时都更新GraphTab。这可能吗?

2 个答案:

答案 0 :(得分:1)

根据您的上一条评论,此代码已经过测试,可以产生预期效果。

Sub Macro1()

    Dim ws As Worksheet
    Set ws = Sheets("NewChartSheet") ' change name as needed

    ws.Range("A1").Formula = "=RIGHT(CELL(""filename"",A1),LEN(CELL(""filename"",A1))-FIND(""]"",CELL(""filename"",A1)))        

    Dim cht As ChartObject
    Set cht = ws.ChartObjects(1) 'since just one chart on page, it's the first one in the collection

    With cht.Chart.ChartTitle
        With .Format.TextFrame2.TextRange.Font
            .NameComplexScript = "Times New Roman"
            .NameFarEast = "Times New Roman"
            .Name = "Times New Roman"
            .Size = 10
        End With
        .Caption = "=NewChartSheet!R1C1"
    End With

End Sub

要了解图表标题如何设置为在更改工作表名称时自动更改,请参阅以下内容:

  1. .Caption = "=NewChartSheet!R1C1"将图表标题设置为等于单元格A1中的值
  2. ws.Range("A1").Formula设置公式以显示工作表名称。
  3. A1中的公式使用CELL函数的filename参数,该参数返回引用单元格的完整文件路径,文件名和工作表名称。
  4. 该公式进一步操作文件名的格式,只返回工作表名称。

答案 1 :(得分:0)

也许这是您一直在寻找的解决方案:

With Sheet1.ChartObjects("Chart 1").Chart.ChartTitle
    .Text = "test"
    .Font.FontStyle = "Times New Roman"
    .Font.Size = 10
End With

如果您使用工作表的代码名称而不是工作表名称,则在更改图表工作表的名称时代码仍然有效。如果您打算更改图表名称,那么我会集成一个循环,如此

For Each cht In Sheet1.ChartObjects
    With cht.Chart.ChartTitle
        .Text = "test"
        .Font.FontStyle = "Times New Roman"
        .Font.Size = 10
    End With
Next cht