Powerpoint中的粘贴图表和更改大小 - VBA

时间:2014-12-29 12:48:48

标签: excel vba charts powerpoint paste

我正在尝试使用以下命令在PowerPoint中粘贴图表:

PPApp.CommandBars.ExecuteMso "PasteExcelChartSourceFormatting"

它运行良好,但是当我尝试更改大小和位置时,代码不会在图表属性中生效,也不会返回错误。 当我使用命令时:

Shapes.Paste.Select

我可以更改并调整图表大小,但不适合我,因为我想要“PasteExcelChartSourceFormatting”。 我的错误是什么?

我的完整代码     使用PPSlide

    ActiveChart.ChartArea.Copy

    PPApp.CommandBars.ExecuteMso "PasteExcelChartSourceFormatting"

    '.Shapes.Paste.Select

    With PPApp.ActiveWindow.Selection.ShapeRange
        .LockAspectRatio = msoFalse
        .Width = 680.314961
        .Height = 453.543307
        .Left = 19.8425197
        .Top = 56.6929134
    End With

3 个答案:

答案 0 :(得分:1)

尝试以下几点:

Dim oSh As Object ' or PowerPoint.Shape if you've set a reference to PPT
Dim lSlideIndex As Long

lSlideIndex = 1

CommandBars.ExecuteMso "PasteExcelChartSourceFormatting"
Set oSh = ActivePresentation.Slides(lSlideIndex).Shapes(ActivePresentation.Slides(lSlideIndex).Shapes.Count)

With oSh
    .Left = 0
    .Width = 100
End With

答案 1 :(得分:0)

我试图这样做,但不起作用。似乎演示文稿没有更新形状数字。我试过这个:

lSlideIndex = oPPtApp.ActiveWindow.View.Slide.SlideIndex

MsgBox oPPtApp.ActivePresentation.Slides(lSlideIndex).Shapes.Count

oPPtApp.CommandBars.ExecuteMso "PasteExcelChartSourceFormatting"

MsgBox oPPtApp.ActivePresentation.Slides(lSlideIndex).Shapes.Count

执行命令并输入形状,但msgbox在命令之前和之后返回相同的值。 " oPPtApp.CommandBars.ExecuteMso"但是当我在不同的例程中运行时,数字已经更新。好像我在命令中运行例程" oPPtApp.CommandBars.ExecuteMso"一个用于调整形状的工作完美无缺

答案 2 :(得分:0)

在PowerPoint中调用ExecuteMso时似乎是一个常见问题。尝试插入:

Application.DoEvents()

在ExecuteMso()命令之后。这在大多数(但不是全部,根据我的经验)情况下都有效。

如果MSFT只是在对象模型中公开这些粘贴方法和其他东西(如Undo),那么就可以避免调用ExecuteMso并使开发人员更容易。