Hum*_*ler 9 excel vba office-2007 ms-office excel-vba
我正在尝试实现一个私有子例程来将Sheet添加到活动工作簿(正在使用Sheet,以便可以选择添加xlForms,xlWorksheet等).
但是我有一个奇怪的问题,即相对于工作簿中的其他工作表创建新图表的位置.
我首先删除同名表(如果存在),然后使用以下代码:
ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _
Type:=sheet_type).Name = sheet_name
Run Code Online (Sandbox Code Playgroud)
sheet_type枚举的可选参数在哪里XlSheetType,sheet_name是a 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
Run Code Online (Sandbox Code Playgroud)
Sheets.count()在前面的例子中正确地返回3(因为我只从表格1,2和3开始),因此它应该假设在第三张表格之后定位,但事实并非如此.尝试Sheets.count() + 1进行测试只会给我一个超出范围运行时异常的数组下标(这是预期的).
我甚至只测试了基本代码:
ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _
Type:=xlChart).Name = "Test"
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的结果.
所以基本上我的问题是:我在这里做错了吗?是否有任何特定原因导致图表无法添加到工作簿的末尾?或者这可能是VB中需要修复的问题/错误?
我正在使用Office 2007,所以另外它是在新版本中修复的错误吗?
任何输入都会有帮助.
编辑:
值得注意的是,After:=Sheets(Sheets.count())产生相同的位置After:=Sheets(Sheets.count() - 1),但仅限于此情况Type:=xlChart
编辑2 这更有趣.如果您创建一个图表,将其作为工作簿中的最后一个工作表,并使用以下代码:
ActiveWorkbook.Charts.Add After:=Charts(1)
Run Code Online (Sandbox Code Playgroud)
Excel将自动重新定向图表,以便工作表最后.
例如,如果您有:
Sheet 1 | Sheet 2 | Sheet 3 | Chart 1
Run Code Online (Sandbox Code Playgroud)
并使用代码,你会得到
Sheet 1 | Sheet 2 | Chart 1 | Chart 2 | Sheet 3
Run Code Online (Sandbox Code Playgroud)
小智 3
好吧,我不确定这是否会对您有帮助,但是是的,它在这里有同样奇怪的行为,并且找不到任何“干净”的方法来使纸张保持最后,所以我的解决方案是:
ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count()), _
Type:=xlChart).Name = sheet_name
Sheets(sheet_name).Move After:=Sheets(Sheets.Count())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3623 次 |
| 最近记录: |