好的我是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代码不是很了解,我在黑暗中迷失了。
感谢您的回复!谢谢你的帮助!
答案 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
语句清理了它。此外,所有内容都在代码顶部指定:数据所在的位置等。
依靠Sheet
或SeriesCollection
的索引是不好的做法,盲目地假设它是(1)。我保证这会在某些时候为你搞砸。最好保留对这些对象的引用,如下所述,例如Set serMyseries = .SeriesCollection.NewSeries
,然后按serMyseries
操作 - 不在SeriesCollection(1)
。
只有在代码顶部有Dim
时,才需要所有Option Explicit
语句。如果您不使用Option Explicit
,则可以删除这些行。 (但Option Explicit
为good 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