更改工作表中所有图表的字体大小 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
我尝试使用此代码将 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