2013-12-09 37 views
2

我正在尝试编写应该自动替换PowerPoint演示文稿中的某些形状的代码。假定已知要替换的形状的位置编号。 我的第一个想法是删除形状,然后在幻灯片中添加另一个形状。在Excel VBA中替换(powerpoint)形状而不更改其位置编号

sld.Shapes(numShpe).Delete 

srcSheet.ChartObjects(chartNum).Copy 
sld.Shapes.Paste 

的问题是,如果我想再次使用此代码,numShpe将不再我想更换形状的数量。实际上,当使用delete时,形状(n)变成形状(n-1)。 因此,如果有一种方法可以在不改变编号的情况下进行删除,那么就不会有任何问题。

有什么想法可以建议吗?

Post 2:

我试过了Siddharth的建议。这里是我的代码的一部分:

Set sld = pres.Slides(slideNum) 
Dim shpeName As String 
shpeName = "Picture 15" 


Dim shpe As PowerPoint.Shape 

Set shpe = sld.Shapes(shpeName) 

shpe.Delete 

srcSheet.ChartObjects(chartNum).Copy 

Set shpe = sld.Shapes.PasteSpecial(DataType:=10, link:=msoFalse) 

shpe.Name = shpeName 

运行它时,我得到了以下错误(关于转让上线Set shpe = slide.Shapes.PasteSpecial(DataType:=10, link:=msoFalse)

“形状(未知成员):无效的请求指定的数据类型不可用“。

我不能找出它从何而来......

+0

而不是使用数字,给他们一个名字,然后使用该 –

回答

3

而不是使用数字,给形状的名称,然后使用该

例如(久经考验

Sub Sample() 
    Dim oPPApp As Object, oPPPrsn As Object 
    Dim oPPSlide As Object, oPPShape As Object 
    Dim FlName As String 
    Dim chartNum As Long 

    '~~> Change this to the relevant file 
    FlName = "C:\MyFile.PPTX" 

    '~~> Establish an PowerPoint application object 
    On Error Resume Next 
    Set oPPApp = GetObject(, "PowerPoint.Application") 

    If Err.Number <> 0 Then 
     Set oPPApp = CreateObject("PowerPoint.Application") 
    End If 
    Err.Clear 
    On Error GoTo 0 

    oPPApp.Visible = True 

    '~~> Open the relevant powerpoint file 
    Set oPPPrsn = oPPApp.Presentations.Open(FlName) 
    '~~> Change this to the relevant slide which has the shape 
    Set oPPSlide = oPPPrsn.Slides(1) 
    '~~> This is the shape which will be replaced 
    Set oPPShape = oPPSlide.Shapes("MyShape") 

    oPPShape.Delete 

    chartNum = 1 

    ThisWorkbook.Sheets("Sheet1").ChartObjects(chartNum).Copy 

    Set oPPShape = oPPSlide.Shapes.PasteSpecial(DataType:=10, Link:=msoFalse) 
    oPPShape.Name = "MyShape" 
End Sub 
+0

你好Siddharth。首先谢谢。我试图按照你的建议去做。但是我在分配Set shpe = slide.Shapes.PasteSpecial(DataType:= 10,link:= msoFalse)时出错了。我应该写在另一篇文章中,以便更清楚。 –

+0

我也试过你的代码,只更改了文件名,并且在同一行上仍然出现错误。这一次,错误是“自动化错误”“未指定的错误”。我正在使用office 2010. –

+0

上面的代码已经过测试。我可以看到你的PPT文件的样本吗? –

相关问题