好的我是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 回答
这会奏效 . 您的代码包含大量重复的关键字;注意我使用
With
语句清理了它 . 此外,所有内容都在代码顶部指定:数据所在的位置等 .依靠
Sheet
或SeriesCollection
的索引是不好的做法,盲目地假设它是(1) . 我保证这会在某些时候为你搞砸 . 最好保留对这些对象的引用,如下所述,例如Set serMyseries = .SeriesCollection.NewSeries
然后在serMyseries
上操作 - 不在SeriesCollection(1)
上 .只有在代码顶部有
Option Explicit
时,才需要所有Dim
语句 . 如果您不使用Option Explicit
,则可以删除这些行 . (但Option Explicit
是good practice . )以下两行代码无用(第一行创建一个系列,第二行立即删除它)所以我删除了它们 .
阿曼达,
我已修改您的代码,以通过它的索引号引用工作簿中的第一个工作表 . 此代码允许您将图表应用于工作簿中的第一个工作表,而不管它的名称是什么 . 这是通过工作表(x)完成的,其中“x”是您要引用的工作表 . 工作簿中的第一个工作表传统上是“1” .
希望这可以帮助,
约翰