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
。
对于每一个可用的参数,如xlWorksheet
, xlDialogSheet
,甚至是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() + 1
testing只给我一个数组下标超出范围运行时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())