在Excel VBA中用图表填充变量数组

在Excel VBA中用图表填充变量数组,vba,excel,Vba,Excel,我正在处理一个文件,该文件基于用户的数据、变量和格式选择创建多达120个图表。为了做到这一点,我创建了一个变量数组来保存图表,这使我能够轻松地引用它们来添加数据、格式化等。到目前为止,这种方法对我来说效果很好 现在我想让用户对格式做一些小的调整(调整轴上的最小值和最大值,添加或删除图例条目,等等)。为此,我希望继续引用数组中的图表,但似乎无法将现有图表添加到变量数组中 charts(graphIndex) = Worksheets(activeSheetName).ChartObjects("c

我正在处理一个文件,该文件基于用户的数据、变量和格式选择创建多达120个图表。为了做到这一点,我创建了一个变量数组来保存图表,这使我能够轻松地引用它们来添加数据、格式化等。到目前为止,这种方法对我来说效果很好

现在我想让用户对格式做一些小的调整(调整轴上的最小值和最大值,添加或删除图例条目,等等)。为此,我希望继续引用数组中的图表,但似乎无法将现有图表添加到变量数组中

charts(graphIndex) = Worksheets(activeSheetName).ChartObjects("chart name").Chart
当我最初创建图表时,我使用此行在创建图表时将其添加到数组中。我填写适当的参数来放置和调整图表的大小,这似乎很好

Set charts(graphIndex) = activeSheet.ChartObjects.Add(...)
在创建了所有图表之后,我认为使用的非全局变量已经从缓存中清除了(至少这是我目前的理解)。这意味着为了进行这些调整,我需要重新初始化并重新定义用于引用图表的变量数组。这就是我正在努力解决的问题。这是我当前试图将现有图表添加到变量数组的尝试

charts(graphIndex) = Worksheets(activeSheetName).ChartObjects("chart name").Chart
当我运行代码时,我得到一个“运行时错误'438':对象不支持属性或方法。”


希望我提供了足够的上下文,但在此方面的任何帮助都将不胜感激。这感觉应该很简单,但我在网上找不到任何信息。

我只是猜测,在你的代码中,如果你有
设置
这个词,它会起作用(但是,我没有看到整个代码,因此不确定)


如果您确保在第一张工作表上有3个名为“图表1”、“图表2”和“图表3”的图表,则此操作有效:

Option Explicit

Sub TestMe()

    Dim cht2        As Chart
    Dim varArray    As Variant

    With Worksheets(1)
        Set cht2 = .ChartObjects("Diagramm 2").Chart
        varArray = Array(.ChartObjects("Diagramm 1").Chart, cht2)
        ReDim Preserve varArray(2)
        Set varArray(2) = .ChartObjects("Diagramm 3").Chart

        Dim cnt As Long
        For cnt = LBound(varArray) To UBound(varArray)
            Debug.Print varArray(cnt).Name
        Next cnt
    End With

End Sub
Reedim Preserve
增加了一个额外的数组单位,同时保留了已有的数组单位。因此,最终这就是我们在当地人身上所拥有的:


为什么不将您的数组设为全局数组,以便在图表创建代码结束后将其保留下来?除了缺少的
集合
,您必须注意,在第一个示例中,您有一个
图表对象
数组,在第二个示例中,您有一个
图表
数组:这是两种不同的对象类型。感谢您的评论。你说得对,我确实需要使用
Set
。我还是VBA的新手,正在自学。
Set
是否始终用于
变量
类型,还是专门用于对象引用?对于
图表
图表对象
的对比,我仍在考虑在给定情况下使用哪一个。在本例中,我尝试了这两种方法,以查看是否可以使其工作。
Set
用于对象。感谢您的全面回复。使用
Set
似乎是向前迈出了一大步,但我仍在努力使引用正常工作。我的新代码是:
Set charts(graphIndex)=工作表(activeSheetName)。ChartObjects(“chartname”)
现在它已经顺利通过了(谢谢!)。不幸的是,在接下来的几行中,我在
numlegendentrices=charts(graphIndex).Chart.Legend.LegendEntries.count处遇到了一个错误,我知道所有变量都已声明,但我仍然遇到了一个错误。很抱歉,忽略上面的注释。我认为这是一个与原帖子无关的新问题。我想我应该能从这里解决这个问题。非常感谢。