我已经写了一些vba代码来将幻灯片从一个演示文稿复制到另一个演示文稿。 我激活源演示文稿并复制幻灯片。 然后我切换到Destination-Presentation并执行PasteSpecial。 文件完成后,我保存目标演示文稿并关闭它。 来源也关闭了。 然后我循环到下一个文件并打开Source和Destination。 现在这适用于两个或三个文件。然后代码卡住了。 我在调试代码时资助的原因是激活目的地演示 突然不再工作了! 有什么想法发生了什么? 我正在使用PPT 2010和Win 7。 任何提示都将受到高度赞赏! 最好的祝福 汉斯
@TimWilliams 嗨蒂姆, 遵循代码中给我带来问题的部分。 看来,困难在于从源头到目的地的切换。从。切换 目的地来源始终有效。 实际上我写了宏来克服PPT-Handout格式的局限性, 图片通常太小,你不能将它们定位为左向和右向,以获得良好的双面打印输出。 这个宏基本上是基于“SlideCopy” - 微软的例子,它激发了我的尝试。
使用Do..Loop我开始打开源文件,然后是目标文件。 我从一个单独的(空)演示文稿中运行代码,只包含代码。总的来说,我将有3个演示文稿在运行。这只是代码中给我带来问题的部分。总代码有点大,因为我做了很多格式化,你可以想象。 无论如何 - 非常感谢您的兴趣! 汉斯
For x = 1 To SourceSlides 'Loop through all the slides of Source and
ActivePresentation.Slides.Range(Array(x)).Select
ActivePresentation.Slides.Range(Array(x)).Copy 'Select the first slide in the presentation and copy it.
SourceCount = SourceCount + 1
Debug.Print "SourceCount = " & SourceCount
If SourceCount = 1 Then 'window must be visible
prDst.Windows(1).Activate ' Switch to destination presentation. <-- The problem!!
oPpt.Visible = msoTrue
ActiveWindow.View.GotoSlide (n) 'Switch to the proper slide.
ActivePresentation.Slides(n).Shapes.PasteSpecial (ppPasteEnhancedMetafile) ' Paste the slide as Shape
If PasteLeftRight = 0 Then ' Adjust the size of the pasted object.
ActivePresentation.Slides(n).Shapes(1).Select
Paste_1_Right
Else
ActivePresentation.Slides(n).Shapes(1).Select
Paste_1_Left
End If
Else
prDst.Windows(1).Activate '<-- The other Problem!!
oPpt.Visible = msoTrue
ActiveWindow.View.GotoSlide (n) 'Index:=ActivePresentation.Slides.Count
ActivePresentation.Slides(n).Shapes.PasteSpecial (ppPasteEnhancedMetafile) ' Paste the slide.
If PasteLeftRight = 0 Then ' Adjust the size of the pasted object.
ActivePresentation.Slides(n).Shapes(2).Select
Paste_2_Right
PasteLeftRight = 1
Else
ActivePresentation.Slides(n).Shapes(2).Select
Paste_2_Left
PasteLeftRight = 0
End If
If x = SourceSlides Then
Debug.Print "x = " & x
Else
ActivePresentation.Slides.Add _
ActivePresentation.Slides.Count + 1, ppLayoutBlank
End If
SourceCount = 0
n = n + 1
End If
' Unselect the object.
ActiveWindow.Selection.Unselect
' Switch to source.
prSrc.Windows(1).Activate
oPpt.Visible = msoTrue
If ActiveWindow.ViewType <> ppViewSlideSorter Then
ActiveWindow.ViewType = ppViewSlideSorter
End If
Next x
.
.
.