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

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

  • 在Excel中创buildVBA,打开并读取三(3)个Excel文件(包括自己),并将数据input到图表/表格/graphics到PowerPoint演示文稿中。 这个版本运行的很好。 VBA由一个用户表单启动

  • 修改后的代码以适应传递给我的要求。 当在一个特定的幻灯片中加载一个graphics时,这个会导致对象“ChartData”的VBA方法“激活”错误。 这些数据是从VBA开始的表单中传输的。

  • 我无法稳定地重新创build这个错误,直到我开始保存当它询问时启动脚本的Excel文件。 现在我能。

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

  • testing的用户第一次体验错误。 我不。 但是,在成功或失败运行之后,我会在保存Excel书籍后进行进一步的迭代。

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

  • 只有在保存启动过程的Excel后才会发生,并且在重新创build错误时再次testing该过程。

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

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

  • 当发生错误并且中断代码时,我无法使用“文件”菜单closuresPowerPoint或Excel。 我必须使用右上angular的'Red X'closures。 色带和标签也是不可用的(不要对点击事件作出反应)。 微软确实要求保存选项。

我试过了:

  • 遍历代码,明确closures对象后,他们已被打开,不需要。
  • 改变ScreenUpdating的位置等应用程序进程

这是它旅行的function。 它在trpChartData.Activate为特定的graphics(这是shapeName):

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