Это по сути опечатка.ошибка 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"