VBA Excel 2010-将未知图表分配给变量

VBA Excel 2010-将未知图表分配给变量,vba,excel,charts,Vba,Excel,Charts,我正在尝试将图表设置为变量,但是由于我的电子表格中有多个图表,我需要能够激活图表并将其分配给变量 对于记录ChartHandel=ActiveSheet.ChartObject(1)不起作用,我也尝试了.Shape(1)和图表(“图表名称”),但这些也不起作用 Dim ChartHandel2 As Chart ActiveSheet.ChartObjects(1).Activate ChartHandel2 = ActiveChart 即使这样,也会出现错误'91,对象变量或未设置块变量'

我正在尝试将图表设置为变量,但是由于我的电子表格中有多个图表,我需要能够激活图表并将其分配给变量

对于记录
ChartHandel=ActiveSheet.ChartObject(1)
不起作用,我也尝试了
.Shape(1)
图表(“图表名称”)
,但这些也不起作用

Dim ChartHandel2 As Chart

ActiveSheet.ChartObjects(1).Activate
ChartHandel2 = ActiveChart
即使这样,也会出现错误'91,对象变量或未设置块变量',看起来它应该可以工作,我确信我曾经有过这样的工作(作为一种解决方法)


我的问题是,如果变量不处于活动状态,您基本上可以将图表分配给变量吗(如果可能,如何分配)?

如果您对索引不确定,您可以为每个变量使用循环图表。像这样的

Sub testChart()

    Dim testSheet As Worksheet
    Set testSheet = Sheets("Sheet1")

    Dim myChart As ChartObject
    Dim chartVariable As Chart
    With testSheet
        For Each myChart In .ChartObjects
            Set chartVariable = myChart.Chart

        Next myChart
    End With

End Sub

警告:它是唯一的演示版本,需要进一步更改,具体取决于您需要什么

如果您不确定是否使用索引,您可以为每个循环使用图表。像这样的

Sub testChart()

    Dim testSheet As Worksheet
    Set testSheet = Sheets("Sheet1")

    Dim myChart As ChartObject
    Dim chartVariable As Chart
    With testSheet
        For Each myChart In .ChartObjects
            Set chartVariable = myChart.Chart

        Next myChart
    End With

End Sub

警告:它是唯一的演示版本,需要进一步更改,具体取决于您需要什么

分配对象时,必须使用赋值语句左侧的
Set
关键字

furthemore对象是该对象的成员

下面是一个处理这些问题的小例子

Option Explicit

Sub ChartObjects()

Dim chartObj As ChartObject

With ThisWorkbook.Worksheets("charts")

    For Each chartObj In .ChartObjects

        With chartObj ' to deal with current "ChartObject" object

            With .Chart ' to deal with "Chart" object of "ChartObject" object
                .ChartType = xlXYScatter ' or another XlChartType Enumeration (https://msdn.microsoft.com/en-us/library/office/ff838409.aspx)

                MsgBox .ChartArea.Name

                .HasLegend = False

                .ChartTitle.Caption = "chart title you need"
            End With

        End With

    Next chartObj

End With

End Sub

分配对象时,必须使用赋值语句左侧的
Set
关键字

furthemore对象是该对象的成员

下面是一个处理这些问题的小例子

Option Explicit

Sub ChartObjects()

Dim chartObj As ChartObject

With ThisWorkbook.Worksheets("charts")

    For Each chartObj In .ChartObjects

        With chartObj ' to deal with current "ChartObject" object

            With .Chart ' to deal with "Chart" object of "ChartObject" object
                .ChartType = xlXYScatter ' or another XlChartType Enumeration (https://msdn.microsoft.com/en-us/library/office/ff838409.aspx)

                MsgBox .ChartArea.Name

                .HasLegend = False

                .ChartTitle.Caption = "chart title you need"
            End With

        End With

    Next chartObj

End With

End Sub

哦,我的脸。。。我简直不敢相信我忘记了设置,只是看到它让我想爬进一个漆黑的深坑我把这个设置为答案,因为我将使用设置图表handle2=ActiveChart来解决目前的问题,每个循环的
都有点超出我的能力,如果你能提供一个链接来解释它们,这将极大地帮助我激活然后设置。您只需编写“Set ChartHandel2=ActiveSheet.ChartObjects(1)”,但请记住,“ChartHandel2”必须声明为“ChartObject”,因为“for each next”是应用于任何对象集合的VBA构造。你可以看到我的脸。。。我简直不敢相信我忘记了设置,只是看到它让我想爬进一个漆黑的深坑我把这个设置为答案,因为我将使用设置图表handle2=ActiveChart来解决目前的问题,每个循环的
都有点超出我的能力,如果你能提供一个链接来解释它们,这将极大地帮助我激活然后设置。您只需编写“Set ChartHandel2=ActiveSheet.ChartObjects(1)”,但请记住,“ChartHandel2”必须声明为“ChartObject”,因为“for each next”是应用于任何对象集合的VBA构造。您可以看到您的代码正常工作,但我需要对其进行的更改无法满足我的需要,因此我将在可能的情况下对每个
循环进行
,希望使用您的代码或用户3598756代码,具体取决于它的工作方式,感谢您的回答虽然您的代码可以工作,但我需要对其进行的更改无法满足我的需要,因此我将在可能的情况下查看每个
循环的
,并希望根据其工作方式使用您的代码或用户3598756代码,谢谢您的回答