VBA формы культур (OLEобъекты и графики) невольно - PullRequest
0 голосов
/ 19 декабря 2018

У меня возникла следующая проблема.

Я использую VBA для обновления колоды Powerpoint выбранной пользователем информацией.Пользователи выбирают выбранные данные, обновляют соответствующие таблицы / графики, а затем они обновляются в Powerpoint.У некоторых пользователей возникает проблема, когда колода обновляется, но объекты OLE (диаграммы, таблицы Excel) обрезаются.

Я использовал следующий код для хранения размера и позиций обновленных фигур.,Это работает для большинства пользователей, но в некоторых случаях кажется, что программа изменяет размеры объектов, но сохраняет их в предопределенных заполнителях, поэтому они правильно позиционируются на слайдах, но обрезаются (как будто их масштабирование увеличивается примерно на 1020 процентов).

Любая помощь здесь приветствуется.

 For Each aSlide In pptPresentation.Slides
        For Each aShape In aSlide.Shapes
            With aShape
                .LockAspectRatio = msoTrue
                .Tags.Add Name:="L", Value:=CStr(.Left)
                .Tags.Add Name:="T", Value:=CStr(.Top)
                .Tags.Add Name:="H", Value:=CStr(.Height)
                .Tags.Add Name:="W", Value:=CStr(.Width)
            End With
        Next
    Next        

'Update slides in PowerPoint Presentation with new content
For Each aSlide In pptPresentation.Slides
    For Each aShape In aSlide.Shapes
        If (aShape.Type = msoLinkedOLEObject) Or (aShape.Type = msoChart) Then
                aShape.LinkFormat.Update
        End If
    Next
Next

pptPresentation.UpdateLinks

For Each aSlide In pptPresentation.Slides
        For Each aShape In aSlide.Shapes
            With aShape
                ' skip untagged shapes:
                sTest = .Tags("L") & .Tags("T") & .Tags("H") & .Tags("W")
                If Len(sTest) > 0 Then
                    .Left = CSng(.Tags("L"))
                    .Top = CSng(.Tags("T"))
                    .Height = CSng(.Tags("H"))
                    .Width = CSng(.Tags("W"))
                End If
            End With
        Next
    Next

1 Ответ

0 голосов
/ 21 декабря 2018

У меня была эта проблема раньше и из того, что я узнал, она появляется при изменении коэффициента масштабирования в книге Excel.Когда вы вставляете объект и связываете его, коэффициент масштабирования, на котором он находился, переносится со ссылкой.Если вы измените коэффициент масштабирования в своей рабочей книге Excel, чтобы перейти от 100% к 150%, он будет переносить новый коэффициент масштабирования при обновлении ссылки.

Единственный реальныйРешение заключается в том, чтобы люди не меняли коэффициент масштабирования в книге Excel.

...