excel 我得到一个内存不足的错误只有当我尝试这名字添加到这图表

hc2pp10m  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(103)

我有一个将创建一个图表到工作表的子,当我试图添加名称到图表与.name它给我一个错误“内存不足”.我曾试图添加它内部的with块,但同样的错误,我也尝试了不同的名称,而不是hi,但仍然是同样的事情.

Option Explicit
Sub addchartv4()
Dim chart As chart
Dim xRg As Range
 Dim chartdatarange As Range, chartExists As Boolean
 
 Set chartdatarange = Worksheets("count_issue").Range("a3:c17")
 
 
' chartexists = False
' For Each Chart In ActiveSheet.ChartObjects
'    If Chart.Name = "issue_count" Then
'        chartexists = True
'        Exit For
'    End If
'
' Next Chart
'
Set chart = Nothing
On Error Resume Next
Set chart = Worksheets("chart11").ChartObjects
On Error GoTo 0

 If chart Is Nothing Then
 
 Set chart = Worksheets("chart11").ChartObjects.Add(Left:=Range("a1").Left, Top:=Range("a1").Top, Width:=400, Height:=300).chart
 chart.Name = "hi"
 With chart
    
    .ChartType = xlColumnClustered
    .SetSourceData Source:=chartdatarange
    ', PlotBy:=xlColumns
    
    .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
elcex8rz

elcex8rz1#

不应命名图表,而应命名chartObject。
ChartObject是图表的容器(并且是工作表的Shapes-集合的一部分。在ChartObject中,您有Chart-属性,该属性定义真实的图表。您不能命名图表,您只能命名ChartObject。图表具有自动生成的名称(包含工作表+ chartObject名称)。尝试手动设置名称将导致此“内存不足”错误(这只是出现故障的症状)。
现在修复很简单,但是代码中还有另一个问题:检查工作表是否已包含图表(对象)时,使用命令Set chart = Worksheets("chart11").ChartObjects尝试将chartObjects-集合分配给chart变量。无论如何,此操作都将失败,并显示“Type mismatch”。由于您使用On Error Resume Next括起命令,因此看起来好像该工作表上从未有过图表,并且每次创建新图表时都是如此。
如果工作表上始终只有一个图表,则可以将代码更改为

' Check if there is already a chart on the sheet
If Worksheets("chart11").ChartObjects.Count > 0 then Exit Sub 
Dim co as ChartObject
With Worksheets("chart11")
    ' Create a new Chart
    Set co = .ChartObjects.Add(Left:=.Range("a1").Left, Top:=.Range("a1").Top, Width:=400, Height:=300)
    co.Name = "hi"
    Debug.Print co.Name, co.Chart.Name   ' <-- You will see "Hi    chart11 Hi"
End With

With co.Chart
    ...(Do your chart magic here)
End With

如果要检查图表“Hi”是否已存在,请使用

Dim co As ChartObject
On Error Resume Next
' Check if Chart "Hi" already exists
Set co = Worksheets("chart11").ChartObjects("Hi")
If Not co Is Nothing Then Exit Sub
On Error Resume Next

相关问题