0

我有以下代码

Sub Foo()
    Dim Graph As Chart
    Set Graph = AddGraph()
    Graph.name = "XXXX"
End Sub

Function AddGraph() As Chart
    Dim Graph As Chart
    '
    '
    '
    Graph.name = "XXXX"
    Set AddGraph = Graph
End Function

(请注意,小写“名称”的是 VBE。)

在 AddGraph 中,Graph 是用Name="ChartXX". 赋值语句不会更改名称。

在 Foo 中,当执行名称赋值语句时,控制权一直被踢到调用堆栈的顶部。(对 Graph 的其他操作不会导致问题。)

所以我有两个问题:

1 ) 为什么名称更改在 AddGraph 中不起作用?和

2 ) 为什么名称更改后来在 Foo 中崩溃?

4

2 回答 2

2

你忽略了告诉我们 AddGraph() 如何添加图表,或者什么样的图表。餐饮主管假定您添加了图表,在这种情况下,Graph.Name 是一个有效属性。但是,如果您已将图表添加为嵌入式图表,则 Graph.Name 毫无意义。相反,您必须设置 Graph 父级 ChartObject 的名称:

Graph.Parent.Name = "XXXX"

于 2012-06-12T11:32:46.193 回答
0

看起来问题源于 Graph 没有正确设置为您正在创建的图表对象。

尝试这个:

Option Explicit

Sub Foo()
    Dim Graph As Chart
    Set Graph = AddGraph()
    Graph.Name = "MMMMMMM"
End Sub

Function AddGraph() As Chart
    Charts.Add
    With ActiveChart
        .ChartType = xlXYScatterLines
        .SetSourceData Source:=Sheets("Sheet1").Range("A1:B5")
        .Name = "XXXX"
    End With
    Set AddGraph = ActiveChart
End Function

单步执行它,您将看到您的图表在函数中被命名为“XXXX”,并在返回子程序后重命名为“MMMMMM”。

于 2012-06-05T23:54:35.000 回答