使用vba在PowerPoint 2007中将图像定位在幻灯片上

时间:2014-10-31 14:42:08

标签: vba powerpoint powerpoint-2007

我想在Windows上的PowerPoint 2007中做两件事之一。

第一种是更改图像中粘贴的默认位置。当我粘贴我用SAS制作的图表时,它会粘贴到左上角。理想情况下,我想更改默认的粘贴位置。似乎没有任何简单的选择,但我想也许VBA是可能的。

如果不可能,那么我想编写一个VBA宏来逐步浏览每张幻灯片并更改图像位置。

我有一个幻灯片循环工作,感谢这个和其他网站(MsgBox只是一个测试):

Sub SlideLoop()
    Dim osld As Slide

    For Each osld In ActivePresentation.Slides
        osld.Select
        MsgBox "The slide index of the current slide is: " & _
             ActiveWindow.View.Slide.SlideIndex
    Next osld

End Sub

除此之外,我还没有多少运气。我看过代码片段,选择幻灯片上的所有图像并裁剪或调整它们的大小,我在excelhelphq.com上找到了这个用于定位图像的位:

With ActiveWindow.Selection.ShapeRange
  .Left = 50 'change the number for desired x position
  .Top = 50 'change the number for desired y position
End With 

但我不确定如何将其集成到循环中,而Powerpoint VBA的在线文档并不是特别强大。有些代码处理ShapeIndex,但我不确定如何使用它。

我应该提一下,当我有一张图像时,幻灯片上只有一张图像(有些幻灯片根本没有图像)。

这似乎是最节省时间的方法,尽管我仍然首先手动粘贴到PowerPoint中。

我感谢任何帮助!我无法找到解决这个问题的任何内容。

PPT的VBA是否被淘汰?感觉微软并不希望人们能够根据他们不那么出色的在线文档来弄清楚如何使用它。

1 个答案:

答案 0 :(得分:4)

MS不太可能很快淘汰VBA。太多的大型企业客户如果愿意的话就会烤他们。同样,你是对的,文档很糟糕,每次发布都会变得更糟。

这样的地方更有价值。所以,先对你的基本循环进行一点清理:

Sub SlideLoop()
    Dim osld As Slide

    For Each osld In ActivePresentation.Slides
        ' osld.Select  No need to select a slide before acting on it
        'MsgBox "The slide index of the current slide is: " & _
        '     ActiveWindow.View.Slide.SlideIndex
        MsgBox "The slide index of the current slide is: " & cstr(osld.SlideIndex)
    Next osld

End Sub

所以这是一个如何做你想做的事情的开始:

Sub SlideLoop()
    Dim osld As Slide
    Dim oSh As Shape

    For Each osld In ActivePresentation.Slides
        ' check each shape on the slide
        ' is it an image or whatever you're looking for?
        For Each oSh In osld.Shapes
            With oSh
                If .Type = msoLinkedPicture _
                Or .Type = msoPicture Then

                ' position it to taste
                .Left = 100
                .Top = 100

                ' centering/resizing gets trickier
                ' but is still possible.
                ' Exercise for the reader?
                ' Hint:
                ' ActivePresentation.PageSetup.SlideWidth and .SlideHeight
                ' tells you the width and height of the slide
                '
                ' All values are in Points (72 to the inch)

                End If
            End With
        Next    ' Shape
    Next osld   ' Slide

End Sub