[英]Run-time Error '9' - subscript out of range
运行宏时,我不断收到运行时错误,指出下标超出范围。 有人有指针吗? 无效的行是Application.Workbooks(3).Activate
下面是宏。
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
这本质上是一个错字。 下标超出范围错误始终表示您正在尝试使用无效的索引参数为数组/集合建立索引,换句话说,您要的索引不存在,因为它不在序列的范围内。
Application.Workbooks(3)
表示属于当前Application
实例的第三个 Workbook
对象。 如果当前Application
实例包含2个或更少的Workbooks
,则任何大于或等于3的索引值都将引发错误。 同样,索引为0将引发相同的错误。
对于任何Collection
类型都适用, index
参数必须大于0,并且小于或等于集合的长度。 所以:
ThisWorkbook.Worksheets(0)
将失败,因为0
不是有效索引 Worksheets
则ThisWorkbook.Worksheets(13)
将失败 ListObject
,则ActiveSheet.ListObjects(1)
将失败 数组通常为零基,这意味着它们的索引从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” 用人类语言,此错误将是“您要我(Excel或应用程序)转到第三个打开的工作簿并激活它。但是我的工作簿少于3个。因此,我向您显示此丑陋的错误。对不起:(“
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.