偶尔的VBA方法'激活'对象'ChartData'失败

时间:2015-09-18 14:05:50

标签: excel vba excel-vba powerpoint

在开始之前,这里有一些历史:

  • 在Excel中创建VBA以打开和读取三(3)个Excel文件(包括其自身)并将数据输入图表/表格/图表到PowerPoint演示文稿中。 此版本运行良好。 VBA由用户表单启动

  • 修改后的代码以满足传递给我的要求。当在一个特定幻灯片中加载图形时,这个导致对象'ChartData'的VBA方法'激活'的错误。此数据从启动VBA的工作表传输。

  • 我无法稳定地重新创建此错误,直到我开始保存启动脚本的Excel文件时才会提示。现在我可以。

  • 没有VBA驻留在powerpoint演示文稿中。

  • 测试此体验的用户第一次遇到错误。我不。但是,在成功或不成功运行后保存Excel工作簿后,我会进行进一步的迭代。

发生错误时我注意到的屏幕行为:

  • 仅在我保存启动程序的Excel后才会发生,并且在尝试重新创建错误时再次测试该过程。

  • 当VBA在后台运行时,PowerPoint演示文稿成为“已激活”的应用程序

  • 发生在同一幻灯片和图表上(是的,使用PowerPoint中的对象标签)。

  • 发生错误并且我破坏代码时,我无法使用“文件”菜单关闭PowerPoint或Excel。我必须使用右上角的“红色X”来关闭。色带和标签也无法使用(不会对点击事件做出反应)。 Microsoft确实询问了保存选项。

我尝试了什么:

  • 遍历代码并在对象打开后显式关闭对象。
  • 改变ScreenUpdating等的位置。应用程序流程

这是它跳闸的功能。它在特定图形(即shapeName)的trpChartData.Activate上运行:

Function insGraphInfo(ByVal numOfSlide As Integer, ByVal shapeName As String, ByVal cellToMod As String, ByVal valToIns As Variant) As Variant

'Inserts data into a CHART TYPE graph
On Error GoTo ERR_INS_GRAPH

    Dim trpChart As PowerPoint.Chart
    Dim trpChartData As ChartData
    Dim trpWkBk As Excel.Workbook
    Dim trpChartSheet As Excel.Worksheet
    Dim errString As String



    Set oPPTSlide = oPPTFile.Slides(numOfSlide)

       With oPPTSlide
            .Select
       End With

    Set oPPTShape = oPPTFile.Slides(numOfSlide).Shapes(shapeName)
    Set trpChart = oPPTShape.Chart
    Set trpChartData = trpChart.ChartData

    Debug.Print "Activating: " & shapeName & " in slide number: " & numOfSlide

    errString = "Activating: " & shapeName & " in slide number: " & numOfSlide

    trpChartData.Activate

    Debug.Print shapeName & " activated."

    errString = shapeName & " activated."

    errString = "Setting Workbook and Worksheet Objects"

    Set trpWkBk = trpChartData.Workbook
    Set trpChartSheet = trpWkBk.Worksheets(1)

    errString = "Inserting Value into appropriate cell)"
    With trpChartSheet
        .Range(cellToMod).Value = valToIns
    End With

    insGraphInfo = valToIns

    errString = "Refreshing Chart."
    With oPPTShape 'Refreshes
        .Chart.ChartData.Activate
        .Chart.ChartData.Workbook.Close
        .Chart.Refresh
    End With

    Set trpWkBk = Nothing
    Set oPPTSlide = Nothing
    Set oPPTShape = Nothing

    Exit Function

ERR_INS_GRAPH:

    MsgBox "An error occurred while: " & errString
    Resume Next

End Function

1 个答案:

答案 0 :(得分:0)

Excel和PowerPoint是由两个不同的开发人员团队创建的。

PowerPoint.Chart Excel.Chart

不同

是的,它们看起来相同,并且您会认为您对它们的属性具有相同的访问级别,但这就是您错的地方。 PowerPoint版本非常有限。

无论如何,据我所知,您在声明时出错了

Dim trpChartData As ChartData

代替

Dim trpChartData As PowerPoint.ChartData

如Rachel所指出的,

  

trpChartData声明时没有库限定符,因此默认为Excel.ChartData

除了您从未用

清除trpChartData
Set trpChartData = Nothing

我也看不到您.Quit必须创建的Chart.Workbook的Excel应用程序的位置。这可以解释为什么后来在任务管理器中打开了Excel版本。尝试添加此内容...

Dim xlApp as Excel.Application
'
'
Set xlApp = .Chart.ChartData.Workbook.Application
'
'
xlApp.Quit
Set xlApp = Nothing