Может ли VBA обнаруживать перенос строк в легенде диаграммы Excel?

Контекст

Написание кода для форматирования диаграммы (все это должна делать Microsoft, но это отдельно).

Сейчас позиционирую легенду. Берем блок возможных позиций 9×9 и подсчитываем точки данных под каждой. Как фрагмент кода: (ax.MaximumScale - ax.MinimumScale) * co.Chart.Legend.Width / co.Chart.PlotArea.InsideWidth.

Также справляемся с перекрывающимися линиями и текстовыми полями, перекрывающими возможные положения легенды: та же идея, больше сложности.

Вопрос

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

Если .Legend.Width слишком мал, то отдельные тексты легенды (Series.Name) переносятся на ≥2 строки, что нежелательно. Таким образом, VBA может разделить интервал пополам, чтобы найти наименьшую .Legend.Width, для которой нет переноса строк. Но как код VBA может «видеть»|«обнаруживать»|«знать» о существовании переноса строк?

И mutatis mutandis для .Legend.Height: если он слишком мал, некоторые элементы легенды не отображаются. Как код VBA может «видеть»|«обнаруживать»|«знать», что высота слишком мала?

Спасибо.

PS: я полагаю, что правильный ответ будет таким: «VBA не может «видеть»|«обнаруживать»|«знать» ни одно из этих действий». Пожалуйста, опровергните это ожидание.


person jdaw1    schedule 15.02.2018    source источник
comment
Проверьте .Legend.LegendEntries(1).Height. Если при сжатии легенды произойдет перенос, произойдет внезапный скачок этого свойства.   -  person Jon Peltier    schedule 01.03.2018


Ответы (1)


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

person Sam    schedule 15.02.2018
comment
Под белым прямоугольником, возможно, с рамкой. Внутри каких строк, маркеров и рядом с каждым из них текстовое поле. Как вы говорите, «новый набор проблем», включая то, что TextFrame | Объекты TextFrame2 также не раскрывают наличие переноса. - person jdaw1; 15.02.2018
comment
Вы можете создавать маркеры как символы и раскрашивать их как текст. Таким образом, вы можете полностью удалить исходную легенду. - person Sam; 15.02.2018
comment
«—•—»? Не красивая. - person jdaw1; 15.02.2018