繁体   English   中英

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

[英]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不是有效索引
  • 如果有12个或更少的WorksheetsThisWorkbook.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM