运行宏时,我不断遇到运行时错误,指出下标超出范围。有人有指针吗?不起作用的线是 Application.Workbooks(3)。激活
下面是宏。
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveSheet.Unprotect
ActiveSheet.Name = "M-YTD"
Range("E16:H16").Select
Selection.MergeCells = False
Columns("B:G").Select
Range("G11").Activate
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
ActiveSheet.Name = "VarianceRpt"
Rows("1:10").Select
Range("A10").Activate
Selection.EntireRow.Hidden = True
Columns("G:G").ColumnWidth = 50
Range("G18").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Variance Notes"
Range("F19").Select
Selection.Copy
Range("G18:G19").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("D16:F16").Select
Selection.MergeCells = True
ActiveSheet.Previous.Select
Range("E16:H16").Select
Selection.MergeCells = True
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Transfers"
Windows("Var Template.xls").Activate
Range("A1:M37").Select
Selection.Copy
Application.Workbooks(3).Activate
ActiveSheet.Paste
Sheets("VarianceRpt").Select
Sheets("VarianceRpt").Move Before:=Sheets(1)
End Sub
答案 0 :(得分:2)
这实际上是一个错字。 下标超出范围错误始终表示您正在尝试使用无效的索引参数对数组/集合进行索引,换句话说,您要的索引不存在,因为它在外部序列的边界。
Application.Workbooks(3)
表示属于当前Workbook
实例的 third Application
对象。如果当前Application
实例包含2个或更少的Workbooks
,则任何大于或等于3的索引值都会引发错误。同样,索引为0也会引发相同的错误。
对于任何Collection
类型,情况同样如此,index
参数必须大于0,并且小于或等于集合的长度。所以:
ThisWorkbook.Worksheets(0)
将失败,因为0
不是有效的索引ThisWorkbook.Worksheets(13)
少于12个,Worksheets
将会失败ActiveSheet.ListObjects(1)
,ListObject
将失败数组通常是从零开始的,这意味着它们的索引从0开始,因此其上限比其长度小1,所以像这样的数组:
Dim myArray
myArray = Array("A", "B", "C", "D")
上限为3,下限为0。因此,有效索引在0到3的范围内,因此:
myArray(4)
将引发错误myArray(0)
将返回值“ A” 一种Range.Cells
集合是一个例外,它实际上的工作方式有所不同:
ActiveSheet.Range("A1").Cells(2)
指向单元格“ A2” 答案 1 :(得分:0)
在人类语言中,该错误是“您要我(Excel或应用程序)转到第三个打开的工作簿并激活它。但是我的工作簿少于3个。因此,我向您显示 丑陋的错误。抱歉:(“