Контекст
Написание кода для форматирования диаграммы (все это должна делать 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 не может «видеть»|«обнаруживать»|«знать» ни одно из этих действий». Пожалуйста, опровергните это ожидание.
.Legend.LegendEntries(1).Height
. Если при сжатии легенды произойдет перенос, произойдет внезапный скачок этого свойства. - person Jon Peltier   schedule 01.03.2018