Excel 2007 VBA-使用工作表。添加以在工作簿末尾创建图表

Excel 2007 VBA-使用工作表。添加以在工作簿末尾创建图表,vba,excel,ms-office,office-2007,Vba,Excel,Ms Office,Office 2007,我正在尝试实现一个私有子例程,以将工作表添加到活动工作簿(使用工作表以便可以选择添加xlForms、xlWorksheet等) 但是我遇到了一个奇怪的问题:相对于工作簿中的其他工作表,新图表是在哪里创建的 我首先删除同名的工作表(如果存在),然后使用以下代码: ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ Type:=sheet_type).Name = sheet_name ActiveWorkbook.Charts

我正在尝试实现一个私有子例程,以将工作表添加到活动工作簿(使用工作表以便可以选择添加xlForms、xlWorksheet等)

但是我遇到了一个奇怪的问题:相对于工作簿中的其他工作表,新图表是在哪里创建的

我首先删除同名的工作表(如果存在),然后使用以下代码:

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _
Type:=sheet_type).Name = sheet_name
  ActiveWorkbook.Charts.Add After:=Charts(1)
其中,
sheet\u type
是枚举
XlSheetType
的可选参数,
sheet\u name
是一个
字符串

它对所有可用的参数都非常有效,例如
xlsheet
xlDialogSheet
,甚至是
xl4MacroSheet
——但由于某种原因,它会在末尾之前创建
xlChart
1位置,而不是将其作为工作簿中的最后一页

因此,样本I/O(仅从3张纸开始):

Sheets.count()
在前面的示例中正确地返回3(因为我只从第1、2和3页开始),因此假设它应该将其放置在第3页之后,但它不会。 尝试执行
Sheets.count()+1
测试只会给我一个数组下标超出范围的运行时异常(这是预期的)

我甚至只测试了以下的基本代码:

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ 
Type:=xlChart).Name = "Test"
我还是得到了同样的结果

所以基本上我的问题是:我做错什么了吗?为什么不能将图表添加到工作簿末尾,有什么具体原因吗?或者这可能是VB中需要修复的问题/bug

我使用的是Office2007,那么它是否是一个已在较新版本中修复的错误呢

任何意见都会有帮助

编辑: 值得注意的是,
After:=Sheets(Sheets.count())
生成的位置与
After:=Sheets(Sheets.count()-1)
相同,但仅在
Type:=xlChart

编辑2 这更有趣。如果创建一个图表,请将其作为工作簿中的最后一张工作表,并使用以下代码:

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _
Type:=sheet_type).Name = sheet_name
  ActiveWorkbook.Charts.Add After:=Charts(1)
Excel将自动重新确定图表的方向,使工作表处于最后一个位置

例如,如果您有:

Sheet 1 | Sheet 2 | Sheet 3 | Chart 1
使用代码,您将获得

Sheet 1 | Sheet 2 | Chart 1 | Chart 2 | Sheet 3

好的,我不确定这是否对您有帮助,但是是的,它在这里有相同的奇怪行为,并且找不到任何“干净”的方法来让床单保持最后,所以我的解决方案是:

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count()), _
Type:=xlChart).Name = sheet_name
Sheets(sheet_name).Move After:=Sheets(Sheets.Count())

这很有趣,我用我的Excel 2010测试了它,得到了相同的响应<代码>之前
似乎正在工作。此外,将其
放在除最后一张纸之外的任何一张纸之后也有效。我会继续测试,看看我会发现什么。我很高兴这不仅仅是我自己,但我真的希望有一个解决办法。奇怪的是,这个问题只有在使用xlChart时才会发生。请参见此处:。似乎是一个已知的问题,这里有一个建议的解决方案。@TimWilliams感谢链接。这就是我现在使用的解决方案,这似乎是唯一可行的选择。我想他们可能是为了遗产而保留的now@TimWilliams很高兴知道。我还是不明白为什么会这样。我仍然在考虑,一定有一些规则可以解释这一点。这看起来是一个很好的解决办法,可能值得接受作为一个答案。