我注意到您的代码中有一些错误:
- 您尚未创建 PowerPoint.Application 的实例
- 您已声明
pptPres
为 String 但可能应该As Object
表示一个 Powerpoint.Presentation 对象
- 您没有对
pptPres
Shape's 会更容易做到这一点,.Name
但我认为这会奏效。除了上述变量之外,我还进行了一些其他更改以声明更多变量。
Sub Test()
Dim pptApp As Object 'PowerPoint.Application
Dim pptPres As Object 'PowerPoint.Presentation
Dim folderPath As String, file As String
Dim bk As Bookmark
Dim doc As Document
Dim wdRange As Range
Dim shpTextBox as Object 'PowerPoint.Shape
'## As a matter of prefernce I use variable rather than "ActiveDocument"
Set doc = ActiveDocument
'## Use a variable for the bookmark
Set bk = doc.Bookmarks("Update_Image")
'## Assign to the pptApp Application Object
Set pptApp = CreateObject("PowerPoint.Application")
folderPath = doc.Path & Application.PathSeparator
file = "Huntington_Template.pptx"
pptApp.Visible = True
'## assign to the pptPres Presentation Object
Set pptPres = pptApp.presentations.Open(folderPath & file)
'## Select the bookmark so we can copy it
bk.Select
'## Copy it
Selection.Copy
'Note: ensure you are at the correct slide location
'## Assign to the shpTextBox & select it:
Set shpTextBox = pptPres.Slides(1).Shapes("Text Box 2")
shpTextBox.Select
'## Paste in to PPT
pptApp.CommandBars.ExecuteMso "PasteSourceFormatting"
End Sub
注意这会直接粘贴到幻灯片上,如果您需要将其放在 PowerPoint 幻灯片中的特定文本框/形状中,请告诉我。我相当确定可以通过在 PowerPoint/etc 中指定形状名称来完成。
我以前见过这种CommandBars.ExecuteMso
方法,但与许多其他方法相比,它的文档记录不是很好。Application.CommandBars
属性参考没有提到该方法ExecuteMso
,我在这里找到了一些信息:
http://msdn.microsoft.com/en-us/library/office/ff862419(v=office.15).aspx
此方法在特定命令没有对象模型的情况下很有用。适用于内置按钮、toggleButtons 和 splitButtons 的控件。
您将需要一个idMso参数列表来探索,它是一个相当大的可下载文件的一部分,我相信当前适用于 Office 2013:
http://www.microsoft.com/en-us/download/details.aspx?id=727