我正在尝试实现一个私有子程序,以便将一个工作表添加到活动工作簿(使用工作表,以便可以选择添加xlForms、xlWorksheet等)。
但是我遇到了一个奇怪的问题,新的图表是相对于工作簿中的其他表格来创建的。
我首先删除同名的工作表(如果存在的话),然后使用以下代码:
ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _
Type:=sheet_type).Name = sheet_name
其中sheet_type
是枚举XlSheetType
的可选参数,sheet_name
是string
。
它对所有可用的参数(如xlWorksheet
、xlDialogSheet
,甚至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页开始),所以它应该假设在第3页之后定位它,但它没有。尝试为测试做Sheets.count() + 1
只会给我一个数组下标超出范围运行时异常(这是预期的)。
我甚至测试了以下基本代码:
ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _
Type:=xlChart).Name = "Test"
最后我还是得到了同样的结果。
所以基本上我的问题是:我是不是做错了什么?对于为什么不能将图表添加到工作簿的末尾,有什么具体的原因吗?或者这可能是VB中需要修复的问题/bug吗?
我正在使用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
发布于 2014-02-24 13:02:15
好的,我不确定这是否对你有帮助,但是的,它在这里也有同样的奇怪行为,并且找不到任何“干净”的方法来使纸张最后一次,所以我的解决方案是:
ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count()), _
Type:=xlChart).Name = sheet_name
Sheets(sheet_name).Move After:=Sheets(Sheets.Count())
https://stackoverflow.com/questions/21691690
复制相似问题