VBA изменяет метки данных на диаграмме с накоплением столбцов с «Значение» на «Имя серии»

Я хотел бы изменить метки данных на столбчатой ​​диаграмме с накоплением с «значение» на «имя серии».

Диаграмма, которую я хочу отредактировать:  введите описание изображения здесь

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


person Jonathan De Wet    schedule 07.03.2016    source источник
comment
Разве снятие флажка «Значение» и «Имя серии» в диалоговом окне форматирования диаграммы, открытом слева от изображения, не делают именно то, о чем вы спрашиваете? i.imgur.com/Inpf80X.png   -  person eirikdaude    schedule 07.03.2016
comment
По какой-то странной причине вы можете выбирать только одну метку за раз. Поэтому, когда вы меняете ее, она меняет только ту, которую вы выбрали. И нет возможности выбрать и изменить их все вот так   -  person Jonathan De Wet    schedule 07.03.2016


Ответы (1)


Войдя в Excel, я выбираю диаграмму, которую хочу отредактировать, а затем выбираю все метки, перейдя в Инструменты диаграммы> Добавить элемент диаграммы> Метки данных> Дополнительные параметры меток данных.

введите здесь описание изображения

Затем я снимаю флажки с тех опций, которые мне не нужны в своих ярлыках, и отмечаю те, которые мне нужны, в разделе «Параметры ярлыков» в только что открытом диалоговом окне.

введите здесь описание изображения

Это отлично работает для меня, но если это не для вас или вы по какой-либо другой причине хотите редактировать метки через VBA, этот фрагмент скрипта устанавливает метки данной диаграммы на имя серии:

Option Explicit

Sub Macro1()
  With ThisWorkbook.Worksheets("Grafar, utvikling").ChartObjects("Graf3").Chart.FullSeriesCollection(2)
    If Not .HasDataLabels Then
      .ApplyDataLabels
    End If
    If Not .DataLabels.ShowSeriesName Then
      .DataLabels.ShowSeriesName = True
    End If
  End With
End Sub

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

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

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

Sub Macro1()
  Dim se As Series

  For Each se In ThisWorkbook.Worksheets("Grafar, utvikling").ChartObjects("Graf3").Chart.SeriesCollection
    If Not se.HasDataLabels Then
      se.ApplyDataLabels
    End If
    If Not se.DataLabels.ShowSeriesName Then
      se.DataLabels.ShowSeriesName = True
    End If
    If se.DataLabels.ShowValue Then
      se.DataLabels.ShowValue = False
    End If
  Next se

End Sub
person eirikdaude    schedule 07.03.2016
comment
Привет, Эйркдауд. Спасибо за такой подробный ответ. Вот видео, показывающее, что произошло с вашими двумя решениями. youtube.com/watch?v=gcjX3dHSF6M Он лучше объясняет, что произошло затем мой текст ниже - person Jonathan De Wet; 08.03.2016
comment
Используя первый подход, я перехожу в Инструменты диаграммы ›Добавить элемент диаграммы› Метки данных ›Дополнительные параметры меток данных, он сначала добавляет все метки данных с отмеченными флажками« Значение »и« Показать линии выноски ». Когда я собираюсь их изменить, нет возможности выбрать все метки данных. Я могу выбирать только те метки, которые имеют один и тот же столбец в данных. Поэтому, когда я выбираю их и меняю их с «Value» на «Series», я могу изменить только те, которые я смог выделить. Макрос VBA дал аналогичный результат. Он изменяет только метки данных для одного из столбцов данных. - person Jonathan De Wet; 08.03.2016
comment
@JonathanDeWet Я подозреваю, что каждый из ваших столбцов может быть одним набором данных - посмотрите мое обновление ответа, чтобы узнать, как вы можете решить эту проблему. Если мой ответ был вам полезен, проголосуйте за него и / или отметьте его как решение вашего вопроса. - person eirikdaude; 08.03.2016
comment
Сработало отлично (почти). Единственная проблема заключается в том, что он показывает вместе «Значение» и «Название серии». Я хочу только показать «Ценность». ! Пример Еще раз спасибо! - person Jonathan De Wet; 08.03.2016
comment
Чтобы отключить значения, вы должны поместить в цикл что-то вроде se.DataLabels.ShowValue = False. Я уверен, что вы сможете самостоятельно разобраться в последних нескольких перегибах :) Для справки: msdn.microsoft.com/en-us/library/office/dn300818.aspx @JonathanDeWet - person eirikdaude; 08.03.2016
comment
Я играл и пытался заставить его работать. Я записал несколько макросов и посмотрел на другой VBA, чтобы увидеть, как добавить что-то внутри «если, то», но я не мог этого понять. Это моя попытка i.imgur.com/dUcnC3d.png Если у вас есть какие-либо мысли о том, как исправить это было бы круто. - person Jonathan De Wet; 08.03.2016
comment
@JonathanDeWet Вам не нужно помещать его внутри If-оператора, но внутри цикла. Обновленный ответ. Строго говоря, я не уверен, что условные выражения вообще необходимы, но я поместил их туда, чтобы убедиться, что ничего шаткого не произойдет, если он попытается сделать что-то, что уже было сделано ... - person eirikdaude; 08.03.2016
comment
Я отредактировал вторую вещь VBA, которую вы сделали, чтобы она работала с обновлением, которое вы сделали для первого. Отлично работает. Спасибо, что остались со мной :) - person Jonathan De Wet; 08.03.2016
comment
Упс, поместите это в неправильный блок кода - нужно это исправить! :-D - person eirikdaude; 08.03.2016
comment
Давно задан еще один вопрос, который можно исправить с помощью того же решения, которое вы разместили здесь. stackoverflow.com/questions/19725557/ Если вы не хотите отвечать, я с радостью отвечу (скажу, что это ваше решение), но я не хотел красть ваш гений - person Jonathan De Wet; 08.03.2016
comment
@JonathanDeWet Я отмечу его как дубликат - person eirikdaude; 08.03.2016