首页 文章

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

提问于
浏览
0

好的我是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

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

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

    只有在代码顶部有 Option Explicit 时,才需要所有 Dim 语句 . 如果您不使用 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
    
  • 0

    阿曼达,

    我已修改您的代码,以通过它的索引号引用工作簿中的第一个工作表 . 此代码允许您将图表应用于工作簿中的第一个工作表,而不管它的名称是什么 . 这是通过工作表(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)
    

    希望这可以帮助,

    约翰

相关问题