You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为图表设置.Name属性时触发Out of Memory错误求助

问题根源与修复方案

错误原因

你搞混了Excel里两个关键对象的区别:

  • ChartObject:是工作表上承载图表的容器对象,它的.Name属性可读写,用来设置工作表上图表的显示名称
  • Chart:是图表本身的核心对象,它的.Name属性是只读的,强行赋值会触发"内存不足"错误

你的代码里把变量声明为Chart类型,还直接给它的.Name赋值,这就是报错的核心原因。

修正后的代码

Option Explicit
Sub addchartv4()
    Dim chtObj As ChartObject ' 改成ChartObject类型,操作图表容器
    Dim chartdatarange As Range, chartExists As Boolean
 
    Set chartdatarange = Worksheets("count_issue").Range("a3:c17")
 
    ' 检查目标图表是否已存在
    chartExists = False
    For Each chtObj In Worksheets("chart11").ChartObjects
        If chtObj.Name = "hi" Then
            chartExists = True
            Exit For
        End If
    Next chtObj
 
    If Not chartExists Then
        ' 创建图表容器,获取ChartObject对象
        Set chtObj = Worksheets("chart11").ChartObjects.Add( _
            Left:=Range("a1").Left, Top:=Range("a1").Top, Width:=400, Height:=300)
        
        ' 给图表容器设置名称(这才是正确的操作)
        chtObj.Name = "hi"
        
        ' 操作图表本身的属性,用chtObj.Chart
        With chtObj.Chart
            .ChartType = xlColumnClustered
            .SetSourceData Source:=chartdatarange
            .SeriesCollection(1).XValues = chartdatarange.Columns(1)
            
            .HasTitle = True
            .ChartTitle.Text = "issue_count"
            .HasLegend = False
            .SetElement msoElementDataLabelOutSideEnd
            .SetElement msoElementPrimaryCategoryGridLinesNone
            .SetElement msoElementPrimaryValueAxisNone
        End With
    End If
End Sub

关键修改点

  • 变量类型从Chart改为ChartObject,对应工作表上的图表容器
  • 检查图表存在性时,遍历目标工作表的ChartObjects集合
  • 创建图表后,给ChartObject的.Name赋值,而非Chart对象
  • 操作图表样式时,通过chtObj.Chart访问图表核心对象

内容的提问来源于stack exchange,提问作者Aniruddh H S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:38:26