График данных метки ада - PullRequest
       5

График данных метки ада

0 голосов
/ 27 февраля 2020

Я столкнулся с довольно обостряющейся проблемой с макросом, который масштабирует размер шрифта в диаграммах. Как работает инструмент большего размера, наша компания имеет два разных шаблона 16x9 - один с размерами 10x5,62, а другой с размерами 13,33x7,5. Когда слайды из этих двух шаблонов объединяются, PowerPoint выполняет паршивую работу по масштабированию контента.

Таким образом, общий инструмент, который отлично работает, за исключением этой одной проблемы, создает копию активной презентации, изменяет ее размеры до 10x5,62, а затем проходит через каждую фигуру в презентации и делает положение / размер и размер шрифта ровно 75% от первоначальной презентации. Я могу предположить сравнение А / Б между всеми фигурами, потому что презентации Source и Destination идентичны, за исключением размера страницы.

Единственная проблема состоит в том, что когда инструмент обрабатывает диаграммы - некоторые диаграммы (но не все или даже большинство) сообщают о неправильном размере шрифта для определенных элементов. то есть размер кажется установленным на 13,3 в пользовательском интерфейсе, но объектная модель сообщает 18. В результате, когда происходит умножение размера шрифта, новый размер шрифта слишком велик. Полный инструмент обрабатывает заголовки диаграмм, названия осей, элементы легенд и метки данных по отдельности - но для простоты я просто включаю подпрограмму, которая обрабатывает метки диаграмм:

Sub RefontsizeChartLabels(dChrt As Chart, sChrt As Chart)

On Error GoTo Errhandler

Dim i As Integer
Dim j As Integer

Dim dSeriesVar As Series
Dim sSeriesVar As Series
Dim dDataLabelsVar As DataLabel
Dim sDataLabelsVar As DataLabel
Dim dPointVar As Point
Dim sPointVar As Point
Dim destRange2 As TextRange2
Dim sourceRange2 As TextRange2

Dim isAutoText As Boolean


For i = 1 To dChrt.SeriesCollection.Count
    Set dSeriesVar = dChrt.SeriesCollection(i)
    Set sSeriesVar = sChrt.SeriesCollection(i)
    For j = 1 To dSeriesVar.Points.Count
        Set dPointVar = dSeriesVar.Points(j)
        Set sPointVar = sSeriesVar.Points(j)
        If dPointVar.HasDataLabel = True Then
            Set sDataLabelsVar = sSeriesVar.DataLabels(j)
            Set dDataLabelsVar = dSeriesVar.DataLabels(j)
            isAutoText = dDataLabelsVar.AutoText
            Set destRange2 = dDataLabelsVar.Format.TextFrame2.TextRange
            Set sourceRange2 = sDataLabelsVar.Format.TextFrame2.TextRange
            RefontsizeChartShapeRange destRange2, sourceRange2
            dDataLabelsVar.AutoText = isAutoText
        End If
    Next
Next

Exit Sub

Errhandler:
    Debug.Print "Error: " & Err.Description

End Sub 

Просто для полноты, Вы можете видеть, что подпрограмма RefontsizeChartShapeRange выполняет простую операцию умножения со свойством .Font.Size

Public Sub RefontsizeChartShapeRange(destRange2 As TextRange2, sourceRange2 As TextRange2)

Debug.Print "IN_RefontsizeChartShapeRange"
On Error GoTo Errhandler

Dim i As Long

With destRange2.Font
    .Size = sourceRange2.Font.Size * scaleConstant
End With

Exit Sub

Errhandler:
Debug.Print "Error: " & Err.Description

End Sub

Сначала я думал, что это как-то связано с установленным свойством Autoscale, но возиться с ним казалось, ничего не исправить. Пошаговое выполнение кода, по-видимому, означает, что простой поиск определенных элементов диаграммы с помощью VBA и / или запись их в переменные выводит из строя саму объектную модель. Работа с dDataLabelsVar.AutoText, описанная выше, была обходным путем для одной проблемы, с которой у меня были метки данных, теряющие форматирование чисел после изменения размера шрифта, но это не устраняет проблему с отдельными метками, говоря, что они появляются в 18 баллов, когда появляются быть 13.3.

Любая помощь будет высоко ценится.

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