创建图表时参考第一张表1(以索引形式)

时间:2011-03-18 20:17:24

标签: excel-vba vba excel

好的我是VBA和宏的初学者,但我学得很快。

我正在尝试创建一个宏来重新排列和绘制数据。我将根据文件名应用数千个具有不同选项卡名称的文件。我已经发现可以通过其“索引号”引用该选项卡,并且在对数据进行排序时有效。

现在我正在尝试创建折线图,我不知道如何引用选项卡名称。我正在尝试选择范围。我将其更改回'Sheet1'并计划在我了解'索引号'之前将每个文件的标签名称更改为'Sheet1'。这是完全没有效率的,但这是我的图表创建代码部分的样子:

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("'Sheet1'!$Z$2:$AA$25")
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "='Sheet1'!$C$1"
ActiveChart.SeriesCollection(1).Values = "='Sheet1'!$AA$2:$AA$25"
ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!$Z$2:$Z$25"
ActiveChart.ApplyLayout (3)

我假设我想用某种索引号替换所有'Sheet1',但我无法弄明白!我试过乘以Sheets(1)的随机组合,但由于我对VBA代码不是很了解,我在黑暗中迷失了。

感谢您的回复!谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

的Amanda,

我已修改您的代码,以便通过索引编号引用工作簿中的第一个工作表。此代码允许您将图表应用于工作簿中的第一个工作表,而不管它的名称是什么。这是通过工作表(x)完成的,其中“x”是您要引用的工作表。工作簿中的第一个工作表传统上是“1”。

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets(1).Range("Z2:AA25")
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = Sheets(1).Range("C1")
ActiveChart.SeriesCollection(1).Values = Sheets(1).Range("AA2:AA25")
ActiveChart.SeriesCollection(1).XValues = Sheets(1).Range("Z2:Z25")
ActiveChart.ApplyLayout (3)

希望这有帮助,

约翰

答案 1 :(得分:0)

这会奏效。您的代码包含大量重复的关键字;注意我使用With语句清理了它。此外,所有内容都在代码顶部指定:数据所在的位置等。

依靠SheetSeriesCollection的索引是不好的做法,盲目地假设它是(1)。我保证这会在某些时候为你搞砸。最好保留对这些对象的引用,如下所述,例如Set serMyseries = .SeriesCollection.NewSeries,然后按serMyseries操作 - 不在SeriesCollection(1)

只有在代码顶部有Dim时,才需要所有Option Explicit语句。如果您不使用Option Explicit,则可以删除这些行。 (但Option Explicitgood practice。)

Dim shtData As Worksheet
Dim chtMyChart As Chart
Dim serMyseries As Series
Dim rngName As Range
Dim rngMyValues As Range
Dim rngMyXValues As Range

' What sheet is the data on?
Set shtData = Worksheets("Sheet1") ' Or whatever it's called on the tab

' Where is the data?
Set rngName = shtData.Range("C1")
Set rngMyValues = shtData.Range("AA2:AA25")
Set rngMyXValues = shtData.Range("Z2:Z25")

With shtData
    .Activate

    ' Add a chart.
    Set chtMyChart = .Shapes.AddChart
    With chtMyChart
        .ChartType = xlLineMarkers
        ' Add the series.
        Set serMyseries = .SeriesCollection.NewSeries
        With serMyseries
            .Name = rngName
            .Values = rngMyValues
            .XValues = rngMyXValues
        End With
        .ApplyLayout (3)
    End With
End With

以下两行代码无用(第一行创建一个系列,第二行立即删除它)所以我删除了它们。

ActiveChart.SetSourceData Source:=shtData.Range("Z2:AA25")
ActiveChart.SeriesCollection(1).Delete