Excel VBA:如何将图形声明为对象

Excel VBA:如何将图形声明为对象,excel,vba,Excel,Vba,在名为sheet1的工作表中,有一个名为graph1的图形。此图形是使用“名称”框命名的。我想将其声明为对象,以便以后可以复制和粘贴。我有以下代码: Sub dumb() Dim tot_cap As Object Set tot_cap = ThisWorkbook.Sheets("sheet1").Object("graph1") End Sub 上述代码导致以下错误消息: run time error 438: object doesn't

在名为sheet1的工作表中,有一个名为graph1的图形。此图形是使用“名称”框命名的。我想将其声明为对象,以便以后可以复制和粘贴。我有以下代码:

Sub dumb()

Dim tot_cap As Object

Set tot_cap = ThisWorkbook.Sheets("sheet1").Object("graph1")

End Sub
上述代码导致以下错误消息:

run time error 438: object doesn't support this property or method
如何在VBA中正确声明命名的图形对象?

嵌入式图表是一种

嵌入式图表是一种新的图形

是正确的,但给您留下了完全相同的根本问题

只能在后期绑定代码上引发错误438。在这里,后期绑定是偶然的

Sheets生成一个Sheets对象,它是各种类型的工作表对象的集合。到目前为止,一切顺利。问题是,Sheets.Item隐式调用的默认成员正在生成一个对象,因为存在各种类型的sheet对象,并且如果每次尝试返回一个工作表对象,.Item将不可避免地爆炸

但您知道ThisWorkbook.SheetsSheet1是一个工作表对象。因此,通过提取一个局部变量,您可以告诉编译器您所知道的情况——为了清楚起见,最好是从工作表集合中取消引用它:

Dim sheet As Worksheet
Set sheet = ThisWorkbook.Worksheets("Sheets1")
现在,当您对该sheet对象变量进行成员调用时,您将获得编译器帮助,并且当您键入该变量时。点运算符您将看到工作表没有对象属性,您将很快在内联自动完成下拉列表中找到它的ChartObjects属性,现在编写成员调用不再像是神奇的咒语

具有代码检查功能,可以为您定位隐式后期绑定,如果此工作簿中的Sheet1在编译时存在,它也会自动为您进行此更改。

是正确的,但会给您留下完全相同的基本问题

只能在后期绑定代码上引发错误438。在这里,后期绑定是偶然的

Sheets生成一个Sheets对象,它是各种类型的工作表对象的集合。到目前为止,一切顺利。问题是,Sheets.Item隐式调用的默认成员正在生成一个对象,因为存在各种类型的sheet对象,并且如果每次尝试返回一个工作表对象,.Item将不可避免地爆炸

但您知道ThisWorkbook.SheetsSheet1是一个工作表对象。因此,通过提取一个局部变量,您可以告诉编译器您所知道的情况——为了清楚起见,最好是从工作表集合中取消引用它:

Dim sheet As Worksheet
Set sheet = ThisWorkbook.Worksheets("Sheets1")
现在,当您对该sheet对象变量进行成员调用时,您将获得编译器帮助,并且当您键入该变量时。点运算符您将看到工作表没有对象属性,您将很快在内联自动完成下拉列表中找到它的ChartObjects属性,现在编写成员调用不再像是神奇的咒语


具有可为您定位隐式后期绑定的代码检查功能,如果Sheet1在此工作簿中在编译时存在,它也会自动为您进行此更改。

Shapes或ChartObjects。@BigBen我将声明更改为ChartObjects,现在出现运行时错误13:类型不匹配。有没有可能你可以写一个正式的答案,这样我就可以确切地看到你在说什么?记录一个宏,在其中你选择了图表你是否将Dim tot_cap设置为ChartObject,然后设置tot_cap=ThisWorkbook.Sheetssheet1.ChartObjectsgraph1?@BigBen谢谢,我意识到错误是我把Dim tot_cap写成了ChartObjects,而不是Dim tot_cap写成了ChartObject。您知道ChartObject变量类型是否足以粘贴到PowerPoint演示文稿?形状或ChartObjects。@BigBen我将声明更改为ChartObjects,现在出现运行时错误13:类型不匹配。有没有可能你可以写一个正式的答案,这样我就可以确切地看到你在说什么?记录一个宏,在其中你选择了图表你是否将Dim tot_cap设置为ChartObject,然后设置tot_cap=ThisWorkbook.Sheetssheet1.ChartObjectsgraph1?@BigBen谢谢,我意识到错误是我把Dim tot_cap写成了ChartObjects,而不是Dim tot_cap写成了ChartObject。您知道ChartObject变量类型是否足以粘贴到PowerPoint演示文稿中吗?谢谢@BigBen这解决了我的问题。我将另一个答案标记为正确,因为它提供了额外的澄清,但我真的非常感谢您的帮助。不用担心,很高兴能提供帮助。谢谢@BigBen这解决了我的问题。我将另一个答案标记为正确,因为它提供了额外的澄清,但我真的非常感谢您的帮助。不用担心,很高兴能提供帮助。