VBA(Excel)到Powerpoint自动化(在大型生产中)

VBA(Excel)到Powerpoint自动化(在大型生产中),excel,vba,powerpoint,freeze,Excel,Vba,Powerpoint,Freeze,我的一条大型生产线出现了另一个问题。该工具计算不同的财务KPI和图表,并将其复制到Powerpoint中,然后保存每个PPTx 所有这些都发生在我的机器上。我在大循环外打开Powerpoint实例,并将Powerpoint对象作为参数输入到所需的函数中 Public PowerPointApp as object Set PowerPointApp = CreateObject(class:="PowerPoint.Application") call copyChart

我的一条大型生产线出现了另一个问题。该工具计算不同的财务KPI和图表,并将其复制到Powerpoint中,然后保存每个PPTx

所有这些都发生在我的机器上。我在大循环外打开Powerpoint实例,并将Powerpoint对象作为参数输入到所需的函数中

Public PowerPointApp as object

Set PowerPointApp = CreateObject(class:="PowerPoint.Application")

call copyChartsToPptx(PowerPointApp)
在那里,我检查实例是否仍然可用,如果不可用,我将创建一个新实例并打开模板以填充它

Set PowerpointTest = GetObject(, "PowerPointApp.Application")

If Err.Number <> 0 Then

    Set Powerpoint = CreateObject(Class:="PowerPoint.Application")
    Set PowerpointTest = GetObject(, "Powerpoint.Application")
    Err.Clear  

End If
Set PowerpointTest=GetObject(,“PowerPointApp.Application”)
如果错误号为0,则
设置Powerpoint=CreateObject(类:=“Powerpoint.Application”)
设置PowerpointTest=GetObject(,“Powerpoint.Application”)
呃,明白了
如果结束
这个设置运行非常平稳,即使我模拟了pptx冻结(只需关闭它),一切都正常,他继续重新打开pptx实例并使用它

现在奇怪的是:在一系列随机制作的演示文稿(150240400300USW)之后,PPTX就冻结了,生产停止了。。。当SKcript试图将图表从excel复制到PPTX时会发生这种情况

'Performance Chart mifid kopieren
Sprungmarke3:
Workbooks("Mischungstool_4.0.xlsm").Worksheets("temp_mifid").Activate
ThisWorkbook.Worksheets("temp_mifid").ChartObjects("Per_mifid").Select
ThisWorkbook.Worksheets("temp_mifid").ChartObjects("Per_mifid").Copy

    'Einfügen
    On Error Resume Next
    With ppPres.Slides(32).Shapes.Paste
        .Left = 40
        .Top = 150
    End With

If Err.Number <> 0 Then

    errorCounter = errorCounter + 1
   
    Application.Wait (Now + TimeValue("00:00:01"))
    Err.Clear
    GoTo Sprungmarke3

End If
mifid kopieren绩效表 弹簧标记3: 工作簿(“MISHUNGSTOOL_4.0.xlsm”)。工作表(“temp_mifid”)。激活 此工作簿。工作表(“临时mifid”)。图表对象(“每个mifid”)。选择 此工作簿。工作表(“临时mifid”)。图表对象(“每个mifid”)。副本 “艾因弗根 出错时继续下一步 使用ppPres.Slides(32).Shapes.Paste .左=40 .Top=150 以 如果错误号为0,则 errorCounter=errorCounter+1 Application.Wait(现在+时间值(“00:00:01”)) 呃,明白了 后藤斯普林马克3 如果结束 问题是,当我让错误处理程序永远在这个循环中运行时,他会僵住,但当我点击powerpoint时,他会继续正确地生成文件

但当我试图捕捉到这个错误并在相同位置重新启动循环时,他只是继续生成PPTX,但没有复制图表。。。(表A和elese中的KPI工作正常)

这是一种非常奇怪的行为……所以我的问题是:

  • 如何检查powerpoint是否仍在反应或冻结
  • 我如何将图表从excel复制到VBA,而不在几百次循环后失去Powerpoint连接
  • 在一条庞大的生产线中,还有其他人遇到过这样的问题吗
  • 早期绑定要慢得多,并且触发错误的频率要高得多
  • 如果您需要任何进一步的信息或代码,请随时询问

    万分感谢!!
    Fabian

    我无法重现您的情况以进行测试,但我想您需要将SpringMarke3:进一步向下移动到下一步出错恢复之前。否则,每次宏超时时,都会重新选择和复制图表,这会徒劳地浪费时间。您的计时问题可能只是粘贴操作,而不是选择和复制。此外,我怀疑您是否需要激活并选择图表来复制它,这是另一个浪费时间的问题。您是否在这一行正确复制了代码
    Set PowerpointTest=GetObject(,“PowerPointApp.Application”)
    ?i、 e.您编写的是PowerPointApp而不是PowerPoint。我想每次都会触发您的错误处理代码。我会尝试在激活和复制之间留出一些时间。以及复制和粘贴之间的一段时间。现在这会大大降低整个过程的速度,但这是我必须防止出现像您这样的问题的唯一方法:timestamp=DateAdd(“s”,1,Now())而Now()Set PowerpointTest=GetObject(,“PowerPointApp.Application”)?i、 e.您编写的是PowerPointApp而不是PowerPoint。我想每次都会触发您的错误处理代码。我会尝试在激活和复制之间留出一些时间。以及复制和粘贴之间的一段时间。现在,这会大大降低整个过程的速度,但这是我防止像您这样的问题的唯一方法:timestamp=DateAdd(“s”,1,Now())而Now()