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

问题描述 投票:2回答:1

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

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

当我最初创建图表时,我使用此行在创建图表时将图表添加到数组中。我填写适当的参数来放置和调整图表的大小,这似乎工作正常。

Set charts(graphIndex) = activeSheet.ChartObjects.Add(...)

创建所有图表后,我认为使用的非全局变量是从缓存中清除的(至少这是我目前的理解)。这意味着为了进行这些调整,我需要重新初始化并重新定义我用来引用图表的变量数组。这就是我正在努力的方向。这是我目前尝试将现有图表添加到变体数组中。

charts(graphIndex) = Worksheets(activeSheetName).ChartObjects("chart name").Chart

当我运行代码时,我得到一个“运行时错误'438':对象不支持属性或方法。”

希望我提供了足够的背景,但是对此的任何帮助将不胜感激。这感觉应该相当容易,但我在网上找不到任何信息。

excel vba excel-vba
1个回答
1
投票

我只是猜测你的代码中,如果你有Set字它会工作(但是,我没有看到整个代码,因此不确定)。


如果您确保在第一个工作表上有3个名为“Diagramm 1”,“Diagramm 2”和“Diagramm 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增加了一个阵列单元,同时它保留了已有的阵列单元。因此,最后这是我们在当地人所拥有的:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.