С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 40
Excel

ReDim Preserve в двумерном массиве

01.10.2021, 12:00. Показов 2198. Ответов 12

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пробую ниже следующий код, создается массив PolniySpisok, но при попытке увеличения границы массива выкидывает ошибку Run-time error '9': Subscribe out of Range

вроде все делаю по примеру Микрософта: https://docs.microsoft.com/ru-... -statement
где у меня косяк ? как исправить ?


Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LastRow As Integer 'последняя строка
Dim PolniySpisok() As Variant 'массив
With ThisWorkbook.Sheets("Лист 1")
LastRow = Cells(Rows.Count, 4).End(xlUp).Row
PolniySpisok = .Range(.Cells(1, 1), Cells(LastRow, 2)).Value
ReDim Preserve PolniySpisok(LastRow, 4)
End With
End Sub
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2021, 12:00
Ответы с готовыми решениями:

Как использовать ReDim Preserve для двумерного массива
Создали, например, mArr(n, 4). При определенном условии в ячейке первого столбца, нужно загнать в этот массив еще несколько значений из той...

Redim Preserve не работает
Если есть "Preserve" - то сразу ошибка - "Subscript out of range" в строке Redym Preserve. Без Preserve - всё работает нормально. А мне...

Массив Собственного Типа И Redim Preserve
Всем привет! Описан тип: Type myt p1 As String p2 As String End Type Объявлен массив:

12
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
01.10.2021, 12:02
barsuuuk, косяк тут
Visual Basic
1
ReDim Preserve PolniySpisok(LastRow, 4)
можно увеличивать только второй аргумент и никак иначе
Visual Basic
1
ReDim Preserve PolniySpisok(4, LastRow)
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 40
01.10.2021, 12:06  [ТС]
Я же увеличиваю второй аргумент

было:
Visual Basic
1
LastRow, 2
стало:
Visual Basic
1
LastRow, 4
0
sleep
 Аватар для I can
4916 / 4562 / 838
Регистрация: 13.04.2015
Сообщений: 9,703
01.10.2021, 12:13
Цитата Сообщение от barsuuuk Посмотреть сообщение
Preserve
А нафига нужен этот Preserve, если массив объявлен в этой же процедуре? Убрать его, и все дела.
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 40
01.10.2021, 12:16  [ТС]
I can,
тогда все данные в массиве сотрутся.. а мне надо чтобы они остались и массив расширился
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
01.10.2021, 12:41
Цитата Сообщение от barsuuuk Посмотреть сообщение
PolniySpisok = .Range(.Cells(1, 1), Cells(LastRow, 2)).Value
перед вторым Cells должна стоять точка
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 40
01.10.2021, 12:50  [ТС]
snipe,
точку добавил, спасибо, но и без нее массив PolniySpisok создавался.
но следующей строкой ReDim Preserve PolniySpisok(LastRow, 4)
он категорически не расширяется
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
01.10.2021, 12:56
возможно что LastRow пустая
вы же данные для этой переменной получаете из столбца D
Cells(Rows.Count, 4).End(xlUp).Row

Добавлено через 1 минуту
надо поставить точку останова и посмотреть значения переменных
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
01.10.2021, 13:00
barsuuuk, исправьте строки 3 и 7
Visual Basic
1
2
Dim PolniySpisok 'массив
ReDim Preserve PolniySpisok(1 To LastRow, 1 To 4)
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
01.10.2021, 13:04
Лучший ответ Сообщение было отмечено barsuuuk как решение

Решение

Попробуйте так
ReDim Preserve PolniySpisok(LastRow-1, 4)

Добавлено через 2 минуты
Отсчет строк в Ексель идет от 1
Отсчет элементов массива идет от 0
вы пытаетесь изменить две размерности массива чего делать ну ни как нежелательно
1
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 40
01.10.2021, 13:08  [ТС]
snipe,

Спасибо, сделаю и отпишусь
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
01.10.2021, 13:13
Интересно бы знать и зачем это размещено в
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 40
01.10.2021, 13:18  [ТС]
snipe,

да , с размерностями накосячил,
Option Base 1 помогло

Всем спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2021, 13:18
Помогаю со студенческими работами здесь

Работа с массивом не определенного размера ReDim Preserve
1. создается массив не определенного размера 2.по мере считывания строк из файла массив заполняется меняя размерность(работает нормально)...

Как в С# реализовать VB'шный оператор: ReDim Preserve buf(N)
1. У объекта Obj есть метод со следующей сигнатурой: Method(ref System.Array b) Мне надо передать ему массив double d. Не...

Алгоритм расчёта суммы и произведения элементов в одномерном массиве и двумерном массиве и его модификация
алгоритм расчёта суммы и произведения элементов в одномерном массиве и двумерном массиве и его модификация

Transform-style: preserve-3d;
Добрый день. На этом сайте есть карточки отелей, которые переворачиваются при наведении. Проблема в том, что сделано это с...

В двумерном массиве
помогите плиз... срочно нужно... спс. В двумерном массиве хранится информация о количестве учени¬ков в каждом классе каждой параллели...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru