为图表设置.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
相关产品推荐
相关产品推荐

