更改工作表中所有图表的字体大小 VBA Excel

Change font size of all charts in worksheet VBA Excel

我尝试使用此代码将 select 几个图表从一个 sheet 复制到另一个 sheet,然后更改所有图表的字体大小 selected。我可以复制图表,但当我尝试更改字体大小时程序中断 - 有人可以帮忙吗?

Sub arrangeplots()
'Arranges plots in plotspdf in a printable format

Dim OutSht As Worksheet
Dim Chart As ChartObject
Dim PlaceInRange As Range

Set OutSht = ActiveWorkbook.Sheets("plotspdf") '<~~ Output sheet
Set PlaceInRange = OutSht.Range("B2:J21")        '<~~ Output location

ActiveSheet.Shapes.Range(Array("Chart 11", "Chart 3", "Chart 4", "Chart 7", "Chart 8")).Select
Selection.Copy
OutSht.Paste PlaceInRange

For Each Chart In Sheets("plotspdf").ChartObjects
    With Chart.ChartArea.Format.TextFrame2.TextRange.Font
    .Size = 8
    End With
Next Chart

'Loop charts
'For Each Chart In Sheets("plots").ChartObjects
    'Copy/paste charts
    'Chart.Copy
    'OutSht.Paste PlaceInRange
    'Next Chart

End Sub

请试试这个方法:

If Chart.Chart.ChartArea.Format.TextFrame2.HasText Then
        Chart.Chart.ChartArea.Format.TextFrame2.TextRange.Font.Size = 8
End If

你的Chart是帮助迭代的对象。它的 Chart 属性 就是你所需要的。在这种情况下,建议避免使用 Chart 变量。最好使用 Ch 例如,在这种情况下,我上面试图强调的内容会更容易理解,我 think/hope...

上面的代码必须替换你的:

With Chart.ChartArea.Format.TextFrame2.TextRange.Font
    .Size = 8
End With

并且请声明你的Chart变量As ChartObject,而不是Chart

除此之外,您的代码包含一个基于数组的范围:

ActiveSheet.Shapes.Range(Array("Chart 11", "Chart 3", "Chart 4", "Chart 7", "Chart 8")).Select 'Selection.Copy

为了使用它,不需要 select,不需要复制...之后,您的代码中的所有这个范围都不会 need/use。您在该活动形状的图表之间迭代。对于以后使用剪贴板中的图表,您还有其他想法吗?

由于我(现在)了解到你打算在后期使用它,它可以不使用 selecting,像这样:

ActiveSheet.Shapes.Range(Array("Chart 11", "Chart 3", "Chart 4", "Chart 7", "Chart 8")).Copy

这是对我有用的解决方案:

'Change font size
For Each Chart In Sheets("plotspdf").ChartObjects
   With Chart.Chart.ChartArea.Format.TextFrame2.TextRange.Font
         .Size = 8
   End With
Next Chart