Excel 2007 VBA – 使用Sheets.Add在工作簿的末尾创build图表

我试图实现一个私人子程序,以添加工作表到活动工作簿(工作表正在使用,以便可以select添加xlForms,xlWorksheet等)。

但是我有一个奇怪的问题,相对于工作簿中的其他工作表创build新的图表。

我开始删除相同名称(如果存在)的工作表,然后使用下面的代码:

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ Type:=sheet_type).Name = sheet_name 

其中sheet_type是枚举XlSheetType的可选参数, sheet_name是一个string

对于每一个可用的参数,如xlWorksheetxlDialogSheet ,甚至是xlWorksheet ,它都可以xl4MacroSheet – 但是由于某些原因,在结束之前会创buildxlChart 1的位置,而不是使其成为工作簿中的最后一个工作表。

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

 > Create_Sheet "Test", sheet_type:=xlWorksheet Sheet 1 | Sheet 2 | Sheet 3 | Test > Create_Sheet "Test", sheet_type:=xlDialogSheet Sheet 1 | Sheet 2 | Sheet 3 | Test > Create_Sheet "Test", sheet_type:=xlChart Sheet 1 | Sheet 2 | Test | Sheet 3 

在前面的例子中Sheets.count()正确地返回3(因为我只从表1,2和3开始),所以它应该假设将它放在第三张纸之后,但是不是。 试图做Sheets.count() + 1testing只给我一个数组下标超出范围运行时exception(这是预期的)。

我甚至testing过的基本代码:

 ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ Type:=xlChart).Name = "Test" 

我仍然得到相同的结果。

所以基本上我的问题是这样的:我在这里做错了什么? 是否有任何特定的原因,为什么图表不能添加到工作簿的末尾? 或者,这可能是一个问题/ VB中的错误,需要修复?

我正在使用Office 2007,所以或者是在新版本中修复的错误?

任何input都会有帮助。

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

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

  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 

好吧,我不确定这是否会对你有所帮助,但是是的,它在这里有着同样奇怪的行为,而且找不到任何“干净”的方式来使表单持续下去,所以我的解决scheme是:

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