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

时间:2014-02-11 02:07:44

标签: excel vba excel-vba ms-office office-2007

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

但是我遇到了一个奇怪的问题,即相对于工作簿中的其他工作表创建新图表的位置。

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

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

其中sheet_type是枚举XlSheetType的可选参数,sheet_namestring

对于xlWorksheetxlDialogSheet甚至是xl4MacroSheet等每个可用参数,它都可以正常运行 - 但由于某种原因会在之前创建xlChart 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() + 1进行测试只会给我一个超出范围运行时异常的数组下标(这是预期的)。

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

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

我仍然得到相同的结果。

所以基本上我的问题是:我在这里做错了吗?是否有任何特定原因导致图表无法添加到工作簿的末尾?或者这可能是VB中需要修复的问题/错误?

我正在使用Office 2007,所以另外它是在新版本中修复的错误吗?

任何输入都会有所帮助。

修改 值得注意的是After:=Sheets(Sheets.count())After:=Sheets(Sheets.count() - 1)生成的位置相同,但仅限Type:=xlChart

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

  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

1 个答案:

答案 0 :(得分:3)

好的,我不确定这是否会对你有所帮助,但是,它在这里有相同的奇怪行为,并且找不到任何“干净”的方法使表格最后,所以我的解决方案是:

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