Изменить размер шрифта всех диаграмм на листе VBA Excel - PullRequest
0 голосов
/ 28 февраля 2020

Я попытался использовать этот код, чтобы скопировать несколько выбранных диаграмм с одного листа на другой, а затем изменить размер шрифта всех выбранных диаграмм. Я могу скопировать графики, но программа перестает работать, когда я пытаюсь изменить размер шрифта - может кто-нибудь помочь, пожалуйста?

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

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Это решение сработало для меня:

'Change font size
For Each Chart In Sheets("plotspdf").ChartObjects
   With Chart.Chart.ChartArea.Format.TextFrame2.TextRange.Font
         .Size = 8
   End With
Next Chart
0 голосов
/ 28 февраля 2020

Попробуйте, пожалуйста, такой подход:

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

Ваш Chart - это объект, помогающий в итерации. Свойство Chart - это то, что вам нужно. В такой ситуации рекомендуется избегать использования переменной Chart. Например, лучше использовать Ch, и в таком случае то, что я попытался подчеркнуть выше, будет легче переварить, я думаю / надеюсь ...

Приведенный выше фрагмент кода должен заменить ваш:

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

Для его использования не нужно выбирать, не нужно копировать ... После этого вы не нужно / использовать весь этот диапазон в вашем коде. Вы переходите между графиками этой активной формы. Есть ли у вас что-то еще для дальнейшего использования этой диаграммы из буфера обмена?

Поскольку я (сейчас) понял, что вы собираетесь использовать ее на более поздней стадии, ее можно использовать без выбора, например:

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