使用VBA获取图表名称

使用VBA获取图表名称,vba,excel,charts,Vba,Excel,Charts,我正在设置宏以生成图表。我在生成示例图表时录制了一个宏,但现在我需要让宏独立于图表名称工作(chart 9) 我试过了 Sheets("statistics").Range("A101:C106").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlColumnStacked ActiveChart.SetSourceData Source:=Range("statistics!$A$101:$C$106")

我正在设置宏以生成图表。我在生成示例图表时录制了一个宏,但现在我需要让宏独立于图表名称工作(
chart 9

我试过了

Sheets("statistics").Range("A101:C106").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnStacked
ActiveChart.SetSourceData Source:=Range("statistics!$A$101:$C$106")
ActiveChart.ChartArea.Select
Set ThisChart = ActiveChart
ActiveSheet.Shapes(ThisChart).Name = "waterfall"

但它不起作用

尝试下面的代码,它将在“统计”工作表中循环遍历所有现有的
图表对象
,如果它找到一个名为“图表9”的图表对象,它将把它重命名为“瀑布”

注意:您可以使用类似的方法创建图表,而无需使用
选择
活动表
活动图表

代码

Option Explicit

Sub RenameExistingChart()

Dim ChtObj As ChartObject

For Each ChtObj In Worksheets("statistics").ChartObjects
    If ChtObj.Name = "Chart 9" Then
        ChtObj.Name = "waterfall"
    End If
Next ChtObj

End Sub
编辑1:使用
ChtObj
创建图表:

Set ChtObj = Worksheets("statistics").ChartObjects.Add(Left:=100, Top:=100, _
                                    Width:=100, Height:=100) ' <-- just default settings , modify later    
With ChtObj
    .Chart.ChartType = xlColumnStacked
    .Chart.SetSourceData Source:=range("statistics!$A$101:$C$106")
    .Name = "waterfall"

    With .Chart.SeriesCollection(2).Format.Fill ' modify fill for series (2)
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent3
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Solid
    End With

    .Chart.SeriesCollection(1).ApplyDataLabels ' add data lables to series (1)

End With
Set ChtObj=工作表(“统计”).ChartObjects.Add(左:=100,顶:=100_

宽度:=100,高度:=100)尝试下面的代码,它将在“统计”工作表中循环遍历所有现有的
ChartObjects
,如果它找到一个名为“Chart 9”的chartobject,它将其重命名为“瀑布”

注意:您可以使用类似的方法创建图表,而无需使用
选择
活动表
活动图表

代码

Option Explicit

Sub RenameExistingChart()

Dim ChtObj As ChartObject

For Each ChtObj In Worksheets("statistics").ChartObjects
    If ChtObj.Name = "Chart 9" Then
        ChtObj.Name = "waterfall"
    End If
Next ChtObj

End Sub
编辑1:使用
ChtObj
创建图表:

Set ChtObj = Worksheets("statistics").ChartObjects.Add(Left:=100, Top:=100, _
                                    Width:=100, Height:=100) ' <-- just default settings , modify later    
With ChtObj
    .Chart.ChartType = xlColumnStacked
    .Chart.SetSourceData Source:=range("statistics!$A$101:$C$106")
    .Name = "waterfall"

    With .Chart.SeriesCollection(2).Format.Fill ' modify fill for series (2)
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent3
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Solid
    End With

    .Chart.SeriesCollection(1).ApplyDataLabels ' add data lables to series (1)

End With
Set ChtObj=工作表(“统计”).ChartObjects.Add(左:=100,顶:=100_

宽度:=100,高度:=100)“您可以使用如下内容:

Sub ChartStuff()
Dim cht As Shape
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select
Set cht = ActiveSheet.Shapes(1)
cht.Name = "waterfall"
End Sub
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select

Dim ca As ChartArea, ch As Chart, co As ChartObject
Set ca = Selection 
Set ch = ca.Parent
ch.ChartType = xl3DColumn
Set co = ch.Parent
co.Name = "waterfall"
Debug.Print ca.Name, ch.Name, co.Name

希望这有帮助

您可以使用以下内容:

Sub ChartStuff()
Dim cht As Shape
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select
Set cht = ActiveSheet.Shapes(1)
cht.Name = "waterfall"
End Sub
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select

Dim ca As ChartArea, ch As Chart, co As ChartObject
Set ca = Selection 
Set ch = ca.Parent
ch.ChartType = xl3DColumn
Set co = ch.Parent
co.Name = "waterfall"
Debug.Print ca.Name, ch.Name, co.Name

希望这有帮助

在VBA中处理图表有点复杂。 当您使用
Addchart
时,选择将是
图表区
ChartArea
是属于
ChartObject
您看到的图表名称实际上是
ChartObject

您可以这样做:

Sub ChartStuff()
Dim cht As Shape
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select
Set cht = ActiveSheet.Shapes(1)
cht.Name = "waterfall"
End Sub
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select

Dim ca As ChartArea, ch As Chart, co As ChartObject
Set ca = Selection 
Set ch = ca.Parent
ch.ChartType = xl3DColumn
Set co = ch.Parent
co.Name = "waterfall"
Debug.Print ca.Name, ch.Name, co.Name

在VBA中处理图表有点复杂。 当您使用
Addchart
时,选择将是
图表区
ChartArea
是属于
ChartObject
您看到的图表名称实际上是
ChartObject

您可以这样做:

Sub ChartStuff()
Dim cht As Shape
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select
Set cht = ActiveSheet.Shapes(1)
cht.Name = "waterfall"
End Sub
Range("A101:A106").Select
ActiveSheet.Shapes.AddChart.Select

Dim ca As ChartArea, ch As Chart, co As ChartObject
Set ca = Selection 
Set ch = ca.Parent
ch.ChartType = xl3DColumn
Set co = ch.Parent
co.Name = "waterfall"
Debug.Print ca.Name, ch.Name, co.Name

创建一个从sub中调用的函数,该函数发送活动图表的名称,例如:

Function actchart(ActiveChart As String) As String
  actchart = ActiveChart
End Function
然后,您可以在sub中替换,例如,您有:

ActiveSheet.Shapes("Chart 9").Name = "waterfall" 


这对我来说同样有效!希望能有所帮助。

创建一个函数,您可以从sub中调用该函数,该函数发送活动图表的名称,例如:

Function actchart(ActiveChart As String) As String
  actchart = ActiveChart
End Function
然后,您可以在sub中替换,例如,您有:

ActiveSheet.Shapes("Chart 9").Name = "waterfall" 



这对我来说同样有效!希望有帮助。

也许我的问题不清楚。我编辑它的目的是。@L.Dutch你想做什么?我想我不明白你想实现什么?我希望宏在它创建的图表上工作,独立于它的名称。是的,现在它创建了图表,但随后它弄乱了录制的宏的其余部分,所有活动图表都在其中fail@L.Dutch为什么要使用
ActiveChart
?可能我的问题不清楚。我编辑它的目的是。@L.Dutch你想做什么?我想我不明白你想实现什么?我希望宏在它创建的图表上工作,独立于它的名称是的,现在它创建了图表,但随后它弄乱了录制的宏的其余部分,所有的活动图表都在哪里fail@L.Dutch为什么要使用
ActiveChart
?是每张图纸只创建一个图表还是多个图表?这取决于用户。是每张图纸只创建一个图表还是多个图表?这取决于用户。如果每张图纸有多个图表怎么办?如果每张图纸有多个图表怎么办?这很重要实际上,直接获取对图表的引用非常容易:
Set ch=ActiveSheet.Shapes.AddChart.chart
。返回值是一个
图表
,而选择是一个
图表区域
,这让人很困惑。实际上,直接获取图表的引用非常容易:
Set ch=ActiveSheet.Shapes.AddChart.Chart
你说得对。返回值是一个
图表
,而选择是一个
图表区域
。。。