在开始之前,这里有一些历史:
在Excel中创建VBA以打开和读取三(3)个Excel文件(包括其自身)并将数据输入图表/表格/图表到PowerPoint演示文稿中。 此版本运行良好。 VBA由用户表单启动
修改后的代码以满足传递给我的要求。当在一个特定幻灯片中加载图形时,这个导致对象'ChartData'的VBA方法'激活'的错误。此数据从启动VBA的工作表传输。
我无法稳定地重新创建此错误,直到我开始保存启动脚本的Excel文件时才会提示。现在我可以。
没有VBA驻留在powerpoint演示文稿中。
测试此体验的用户第一次遇到错误。我不。但是,在成功或不成功运行后保存Excel工作簿后,我会进行进一步的迭代。
发生错误时我注意到的屏幕行为:
仅在我保存启动程序的Excel后才会发生,并且在尝试重新创建错误时再次测试该过程。
当VBA在后台运行时,PowerPoint演示文稿成为“已激活”的应用程序
发生在同一幻灯片和图表上(是的,使用PowerPoint中的对象标签)。
发生错误并且我破坏代码时,我无法使用“文件”菜单关闭PowerPoint或Excel。我必须使用右上角的“红色X”来关闭。色带和标签也无法使用(不会对点击事件做出反应)。 Microsoft确实询问了保存选项。
我尝试了什么:
这是它跳闸的功能。它在特定图形(即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
答案 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