运行时错误'9'-下标超出范围

时间:2018-11-26 18:57:33

标签: excel vba

运行宏时,我不断遇到运行时错误,指出下标超出范围。有人有指针吗?不起作用的线是 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

2 个答案:

答案 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个。因此,我向您显示 丑陋的错误。抱歉:(“