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

Excel 创建图表时,请参考第一张表1(索引形式),excel,vba,Excel,Vba,我正在尝试创建一个宏来重新排列和绘制数据 我将把它应用于数千个文件,这些文件根据文件名具有不同的选项卡名称。我发现人们可以通过“索引号”引用选项卡,这在对数据进行排序时起到了作用 现在我正在尝试创建一个折线图,我不知道如何引用选项卡名称。我正在尝试选择范围。我把它改回了“Sheet1”,并计划在知道“索引号”之前将每个文件的选项卡名称改为“Sheet1” 代码的图表创建部分: ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData

我正在尝试创建一个宏来重新排列和绘制数据

我将把它应用于数千个文件,这些文件根据文件名具有不同的选项卡名称。我发现人们可以通过“索引号”引用选项卡,这在对数据进行排序时起到了作用

现在我正在尝试创建一个折线图,我不知道如何引用选项卡名称。我正在尝试选择范围。我把它改回了“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”。我尝试了随机组合的表单1。

Amanda

我已经修改了您的代码,以引用工作簿中的第一张工作表的索引号。此代码将允许您将图表应用于工作簿中的第一张工作表,而不管它的名称如何。这是通过sheetsx实现的,其中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)
希望这有帮助


约翰

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

依靠表格或系列集合的索引,盲目地假设它是1,这是一种糟糕的做法。我保证这会在某个时候把事情搞砸。最好保留对这些对象的引用,如下所述,例如设置serMyseries=.SeriesCollection.NewSeries,然后在serMyseries上操作,而不是在SeriesCollection1上操作

只有在代码顶部有Option Explicit时,才需要所有Dim语句。如果不使用Option Explicit,则可以删除这些行。但选择是明确的

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

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

约翰,非常感谢你的回复!我尝试了你的代码,得到了很好的结果,除了一件事,没有bug:标题不再工作/读取单元格C1。你写了:ActiveChart.seriescolection1.Name=Sheets1.RangeC1,我相信这是对命名C1中的图表标题的调用。但是,图表标题仅显示为图表标题。我真的很想引用C1中的内容。如果有关系的话,该单元格正在通过Vlookup函数引用另一个文件。我尝试了其他随机常数单元格,但它们也不起作用。非常感谢你的帮助!:Jena Francois也感谢您的回复。然而,我能够更好地理解John编写的代码,因为很明显,他没有对我自己的代码做太多更改。我对VBA的理解水平非常低。感谢您的回复,但我还不能完全理解它,无法对其进行操作并将其合并到包含许多其他操作的原始长代码中。我只是不习惯你的格式。谢谢你花时间回答我的问题!好吧,但是最好现在就改掉你的坏习惯,而不是去养成别人的坏习惯。。。
ActiveChart.SetSourceData Source:=shtData.Range("Z2:AA25")
ActiveChart.SeriesCollection(1).Delete