Круговая диаграмма VBA DataLabel Форматирование - PullRequest
0 голосов
/ 21 ноября 2018

Вечер всего,

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

Итак, я записал следующий макрос, основанный на обновлении диаграммы, чтобы отразить нужные мне форматы. Проблема в том, что когда я снова запускаю этот макрос, я получаю «Метод« Выбор »объекта« Сбой данных »»

Sub UpdateChartFormat()
   ActiveSheet.ChartObjects("Chart 4").Activate
   ActiveChart.SeriesCollection(1).DataLabels.Select
   Selection.ShowPercentage = True
   Selection.Separator = "" & Chr(10) & ""
   ActiveSheet.ChartObjects("Chart 1").Activate
   ActiveChart.SeriesCollection(1).DataLabels.Select
   Selection.ShowPercentage = True
   Selection.ShowValue = False
   ActiveSheet.Range("D32").Select
   End Sub

Я был бы очень признателен за помощь в этом, не смог найти исправления в другом месте.

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

В идеале я хотел бы запустить это как часть другого более крупного макроса, не активируя диаграммы, если это возможно.

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Так что теперь этот код запускается без ошибок, но фактически не обновляет форматирование XD

Sub UpdateChartFormat()

With ActiveWorkbook.Sheets("MHFA Summary").ChartObjects("Chart 4").Activate
   With ActiveChart.SeriesCollection(1).DataLabels _
       .ShowPercentage = True
   With ActiveChart.SeriesCollection(1).DataLabels _
       .Separator = "" & Chr(10) & ""
   End With
   End With
End With
With ActiveWorkbook.Sheets("MHFA Summary").ChartObjects("Chart 1").Activate
   With ActiveChart.SeriesCollection(1).DataLabels _
       .ShowPercentage = True
   With ActiveChart.SeriesCollection(1).DataLabels _
       .Separator = "" & Chr(10) & ""
   End With
   End With
End With

End Sub

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Удалось создать цикл, используя следующий код, который обновляет формат DataLabels до того уровня, который я хотел, проходя каждую точку.

Sub FormatDataLabels()
Dim intPntCount As Integer

ActiveSheet.ChartObjects("Chart 4").Activate
With ActiveChart.SeriesCollection(1)
    For intPntCount = 1 To .Points.Count
        .Points(intPntCount).ApplyDataLabels _
            AutoText:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
            ShowValue:=True, ShowPercentage:=True, Separator:="" & Chr(10) & ""
    Next intPntCount
End With
ActiveSheet.ChartObjects("Chart 1").Activate
    With ActiveChart.SeriesCollection(1)
    For intPntCount = 1 To .Points.Count
        .Points(intPntCount).ApplyDataLabels _
            AutoText:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
            ShowValue:=False, ShowPercentage:=True, Separator:="" & Chr(10) & ""
    Next intPntCount
End With
End Sub
0 голосов
/ 21 ноября 2018

Примерно так:

Sub UpdateChartFormat()

   With ActiveSheet.ChartObjects("Chart 4")
       .Activate
       With .Chart.SeriesCollection(1).DataLabels
           .ShowPercentage = True
           .Separator = "" & Chr(10) & ""
       End With
   End With

   With ActiveSheet.ChartObjects("Chart 1")
        .Activate
        With .Chart.SeriesCollection(1).DataLabels
            .ShowPercentage = True
            .ShowValue = False
        End With
   End With

End Sub

В соответствии с https://docs.microsoft.com/en-us/office/vba/api/excel.datalabels.showpercentage

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...