Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
stickstoff
1 / 1 / 0
Регистрация: 03.12.2011
Сообщений: 47
#1

Использую UBound для определения границы массива, но выдает Subscript out of Range

11.04.2012, 18:40. Просмотров 2909. Ответов 5
Метки нет (Все метки)

Передаю в процедуру массив по ссылке. В ней использую UBound для определения границы массива, но
выдает Subscript out of Range. шаблон макроса прилагается...
0
Вложения
Тип файла: xls arr.xls (22.5 Кб, 15 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 18:40
Ответы с готовыми решениями:

Выдает ошибку Runtime error '9': Subscript out of range
Прошу помочь разобраться Private Sub CommandButton1_Click() Dim cost(10) As...

Word: Ubound GetCrossReferenceItems Выдает неправильное занчение
Word 2003 Нужно получить количество вставленных в документ "Рисунок", "Таблиц"...

Ошибка "Subscript out of range" при работе с индексами массива
Добрый день! Никак не могу понять природу ошибки. Массиву присваивается...

Запись данных из одного массива в другой, ошибка "Subscript out of range"
Друзья, помогите разобрать в причине ошибки, которую выдает компилятор при...

Subscript out of range
Sub ff() Dim i As Variant, s As Variant, q As Variant, p As Variant Dim C As...

5
Казанский
14059 / 5785 / 1507
Регистрация: 24.09.2011
Сообщений: 9,066
11.04.2012, 18:46 #2
Массив объявлен, но не инициализирован. Используйте
Visual Basic
1
2
3
4
    Dim arr(5) As String
'или
    Dim arr() As String
    ReDim arr(-3 To 5)
Во втором случае размер массива можно менять по ходу выполнения программы, в первом случае - нет.
1
stickstoff
1 / 1 / 0
Регистрация: 03.12.2011
Сообщений: 47
11.04.2012, 19:13  [ТС] #3
а почему внутри процедуры для переопределения этого массива я не могу использовать ключевое слово
ReDim Preserve? Выдает тот же ляп...
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
11.04.2012, 20:23 #4
По тому что Redim Preserve - означает изменить размерность с сохранением предыдущих данных. Т.к. массив еще не имеет ни границы структуры, ни данных, выдается ошибка.
Нужно сначала объявить любую минимальную размерность, хотя бы Redim arr(0)

Учтите, что нижнюю границу нельзя изменять. Это значит, что:
Visual Basic
1
2
3
Dim arr() As String
ReDim arr(-3 To 5)
ReDim preserve arr(-2 to 4)
выдаст ошибку.

Visual Basic
1
2
3
Dim arr() As String
ReDim arr(-3 To 5)
ReDim preserve arr(-3 to 4)
- а так можно.

Кроме того, если массив двухмерный и более, изменять можно только верхнюю границу последней размерности - redim preserve arr(5, 4, 1 to 8)
0
stickstoff
1 / 1 / 0
Регистрация: 03.12.2011
Сообщений: 47
11.04.2012, 20:51  [ТС] #5
А почему в процедуре использование ReDim Preserve выдает баг, но используя ReDim вроде делает?
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
11.04.2012, 21:02 #6
Значит выполняете непозволенное действие с границами или не инициализировали Redim-ом перед использованием Redim Preserve,
или пытаетесь сменить границу статического массива.

Напишите строки кода, которыми Вы проводите преобразования.
0
11.04.2012, 21:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 21:02

Subscript out of range
Здравствуйте, столкнулся с ошибкой при решении задачи по массивам Option...

Error 9: Subscript out of range
Добрый вечер! Получилось написать код решения системы оду методом Рунге-Кутты,...

Error 9: Subscript out of range
Господа, всем добрый день мне нужно исправить ошибку в программе для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru