2

我想在 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会被淘汰吗?感觉就像微软不希望人们能够根据他们不出色的在线文档来弄清楚如何使用它。

4

1 回答 1

6

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
于 2014-10-31T15:03:05.797 回答