Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 尝试选择图表时出现运行时错误_Excel_Vba_Charts - Fatal编程技术网

Excel 尝试选择图表时出现运行时错误

Excel 尝试选择图表时出现运行时错误,excel,vba,charts,Excel,Vba,Charts,我有一个简单的VBA,它依次选择4个图表中的每一个,然后在它们上运行一个子例程,然后再转到下一个图表 一年来,它一直运转良好,但这个月我突然变得 运行时错误'-2147024809(80070057) Sub-All_图表() 图表对象(“图表1”)。激活 绝对值标签 图表对象(“图表2”)。激活 百分比标签 图表对象(“图表3”)。激活 绝对值标签 图表对象(“图表4”)。激活 百分比标签 端接头 如果我手动选择每个图表,则两个不同的子项,绝对值标签和百分比标签,工作正常。它只是不会选择要开

我有一个简单的VBA,它依次选择4个图表中的每一个,然后在它们上运行一个子例程,然后再转到下一个图表

一年来,它一直运转良好,但这个月我突然变得
运行时错误'-2147024809(80070057)

Sub-All_图表()
图表对象(“图表1”)。激活
绝对值标签
图表对象(“图表2”)。激活
百分比标签
图表对象(“图表3”)。激活
绝对值标签
图表对象(“图表4”)。激活
百分比标签
端接头

如果我手动选择每个图表,则两个不同的子项,
绝对值标签
百分比标签
,工作正常。它只是不会选择要开始的图表


我尝试过使用Record宏,然后选择图表,这给了我相同的
ActiveSheet.ChartObjects(“图表1”)。激活

正如其他人在上面的评论中所说的那样,你真的不应该依赖某个对象处于活动/选中状态。这极易出错,通常是不好的做法

要解决此问题,应将图表作为参数传递给函数,使函数可以直接访问特定图表,而不依赖全局状态

只需确保您还添加了一些错误处理,以防图表被删除或重命名

Sub-All_图表()
关于错误转到捕获
使用ActiveSheet
绝对标签。图表对象(“图表1”)。图表
百分比标签。图表对象(“图表2”)。图表
绝对标签。图表对象(“图表3”)。图表
百分比标签。图表对象(“图表4”)。图表
以
出口接头
捕获:
'在未找到图表的情况下处理任何错误
“如果一个失败了,你想怎么办?
端接头
专用次绝对_标签(ByRef cht如图所示)
“用图表做点什么
端接头
专用子百分比标签(ByRef cht如图所示)
“用图表做点什么
端接头

为了帮助您了解如何引用图表,我做了一个循环,它将打印到您的即时窗口示例中,说明您应该如何调用每个
ChartObject

”循环遍历每个工作表,然后遍历每个图表对象
'在'ThisWorkbook'中。
此作业的专用子列表图表OK()
将ws设置为工作表
对于此工作簿中的每个ws。工作表
作为图表对象的Dim cht
对于ws.ChartObjects中的每个cht
与红隧
'这将编写可用于调用每个图表的特定代码
“单独地。只是为了演示,看看你应该如何调用你的图表。
“@示例:Sheet1.ChartObjects(“图表1”)
调试。打印ws.CodeName&“.ChartObjects(“”&.Name&““”).Chart”
以
下一个红隧
下一个ws
端接头

Absolute\u label
PerCent\u label
可能应该作为参数传递一个
ChartObject
。共享
Absolute\u label
的代码和
PerCent\u label
工作表也受到保护吗?正如BigBen指出的那样,这种方法很容易失败,因为当一段代码运行时,它依赖于激活/选择的内容。修改像
Sub-Absolute\u标签(cht As Chart)
然后调用
Absolute\u标签ActiveSheet.ChartObjects(“图表1”)。Chart
内部
Absolute\u标签
使用提供的
cht
图表对象。您好,已经有一个问题描述了您的问题。请在引发新问题之前尝试搜索:。如果被引用的文章回答了你的问题,也许考虑删除这个问题罗伯特试图帮助,但我已经尝试了代码,它直接赶上。我还将我的代码简化为一个子图()ActiveSheet.ChartObjects(“图表1”)。激活End Sub以避免其他子图出现任何问题,这一行仍然会进入运行时错误“-2147024809(80070057)”您的图表在哪一个工作表上?实际上,在大多数情况下,您不应该使用
Activesheet
,因为这是可以更改的。另外,他们的工作表是不是受到了偶然的保护?再次感谢Robert。工作表称为“四分之一”,不,它不受保护。实际上,我已经解决了这个问题,只需复制一份工作表,删除原始工作表,然后重命名副本,使其具有原始名称,然后突然工作。不知道为什么,但确实如此。但我会用你们所说的来避免将来使用Activesheet。