gpt4 book ai didi

vba - 对象 'Activate' 的偶尔 VBA 方法 'ChartData' 失败

转载 作者:行者123 更新时间:2023-12-01 19:10:38 25 4
gpt4 key购买 nike

在开始之前,先介绍一些历史:

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

  • 修改了代码以满足传递给我的要求。在一张特定幻灯片中加载图表时,此问题会导致对象“ChartData”的 VBA 方法“激活”错误。该数据是从启动 VBA 的工作表中传输的。

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

  • PowerPoint 演示文稿中没有 VBA。

  • 测试此功能的用户第一次遇到错误。我不。不过,无论成功还是失败,我都会在保存 Excel 工作簿后进行进一步的迭代。

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

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

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

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

  • 当发生错误并且我破坏了代码时,我无法使用"file"菜单关闭 PowerPoint 或 Excel。我必须使用右上角的“红色 X”来关闭。功能区和选项卡也无法使用(不对单击事件使用react)。 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

最佳答案

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

PowerPoint.ChartExcel.Chart

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

无论如何,据我所知,当你声明时你错了

Dim trpChartData As ChartData

而不是

Dim trpChartData As PowerPoint.ChartData

正如雷切尔指出的,

trpChartData is declared without a library qualifier and thus defaults to 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

关于vba - 对象 'Activate' 的偶尔 VBA 方法 'ChartData' 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32654052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com