VBA随意裁剪形状(OLE对象和图表)

时间:2018-12-19 13:36:29

标签: excel vba crop powerpoint-vba shapes

我一直遇到以下问题。

我使用VBA用用户选择的信息更新Powerpoint牌组。用户选择选定的数据,刷新适当的表/图形,然后在Powerpoint中对其进行更新。一些用户遇到了更新卡座的问题,但是裁剪了OLE对象(图表,Excel表)。

我一直在使用以下代码存储更新形状的大小和位置。它适用于大多数用户,但在少数情况下,该程序似乎正在调整对象的大小,但将它们存储在预定义的占位符中,因此它们可以正确放置在幻灯片上,但会被裁剪(例如将它们缩放约10倍至20%)。

感谢您的帮助。

 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 :(得分:0)

在您更改Excel工作簿上的缩放倍数之前,从我所学到的问题中发现了此问题。粘贴对象并将其链接时,链接时会保留其原来的缩放比例。如果您在Excel工作簿中更改缩放比例,则从100%变为150%,则更新链接时,它将保留新的缩放比例。

唯一真正的解决方案是确保人们不要更改Excel工作簿上的缩放比例。