PowerPoint在运行excel vba时崩溃



我目前编写了一个Excel VBA代码,可以创建40 + PowerPoint幻灯片。但是,在运行此代码时,PowerPoint 在创建 22 张幻灯片后崩溃。仅当一次性运行 VBA 代码时,才会发生此问题。因为,当我尝试逐行运行相同的代码时,它会成功运行到最后。

对我来说,这很奇怪。我们对这个问题有什么建议吗?

=>下面列出了创建幻灯片 2 之前我的代码(此后它一个接一个地创建其他幻灯片,直到第 43 张幻灯片(

问候阿洛克

Sub test25()
Dim pApp  As PowerPoint.Application
Dim pPres As PowerPoint.Presentation
Dim pSlid As PowerPoint.Slide
Set pApp = New PowerPoint.Application
pApp.Visible = True
pApp.Activate
Set pPres = pApp.Presentations.Open("C:.....Template.pptx")
pPres.Slides(1).Select
Sheets("S01").Select
    ActiveSheet.Range("A1:P27").Select
    ActiveSheet.Shapes.SelectAll
    Selection.copy
pPres.Slides(1).Shapes.PasteSpecial DataType:=wdPasteText
pPres.Slides(2).Duplicate
pPres.Slides(2).Select
Sheets("S02").Select
    ActiveSheet.Range("A1:P27").Select
    ActiveSheet.Shapes.SelectAll
    Selection.copy
pPres.Slides(2).Shapes.PasteSpecial DataType:=wdPasteText

End Sub

我看到了多个潜在问题,其中一些只是代码改进。

在线上:

pPres.Slides(2).Duplicate

您指的是幻灯片 2,但尚未创建幻灯片 2(因为这是创建它的行(。 将其更改为:

pPres.Slides(1).Duplicate

没有那个,我看不到您的代码是如何运行的,即使是一行一行......除非"模板.pptx"已经拥有所有幻灯片(在这种情况下,为什么要复制? 我假设"模板.pptx只包含第一张幻灯片(

最初我怀疑是竞争条件,但通常 VBA 可以很好地处理这些条件。 可以肯定的是,只是一般的良好做法,您可能希望使用变量来引用当前幻灯片,而不仅仅是一个数字(您已经声明了变量(

Set pSlid = pPres.Slides(1)
Sheets("S01").Select
    ActiveSheet.Range("A1:P27").Select
    ActiveSheet.Shapes.SelectAll
    Selection.copy
pSlid.Shapes.PasteSpecial DataType:=wdPasteText
Set pSlid = pSlid.Duplicate
...

同样为了您自己的方便,您希望研究使用循环,例如:

Set pSlid = pPres.Slides(1)
For i = 1 to 43
  Sheets("S" & Format(CStr(i), "00")).Select
    ActiveSheet.Range("A1:P27").Select
    ActiveSheet.Shapes.SelectAll
    Selection.copy
  pSlid.Shapes.PasteSpecial DataType:=wdPasteText
  Set pSlid = pSlid.Duplicate
Next

最新更新