Ошибка времени выполнения '9' - индекс вне диапазона - PullRequest
0 голосов
/ 26 ноября 2018

При запуске моего макроса, я продолжаю получать ошибку во время выполнения, заявляющую, что индекс находится вне диапазона.У кого-нибудь есть указатели?Неработающая строка - это 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 голосов
/ 26 ноября 2018

На человеческом языке эта ошибка будет выглядеть так: «Вы хотите, чтобы я (Excel или Приложение) перешел к третьей открытой книге и активировал ее. Но у меня меньше 3 книг. Итак, я показываю вам эту уродливую ошибку. Извините:( "

0 голосов
/ 26 ноября 2018

Это по сути опечатка.ошибка Subscript out of Range всегда означает, что вы пытаетесь проиндексировать массив / коллекцию с недопустимым параметром index, другими словами, запрашиваемый вами индекс не существует, потому что он находится внеграницы последовательности.

Application.Workbooks(3) означает третий Workbook объект, принадлежащий текущему 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...