Runtime error 7 out of memory как исправить

Добрый день!Проблема в следующем: все данные с листа помещаю в массив, чтобы их быстрее обработать. На малых объемах все работает хорошо. На больших, близких к граничным, вылезает ошибка "RunTime Error 7 - Out of Memory". Она вылезает или на ReDim массива, или на присвоении массиву диапазона с листа.Что странно, так это ошибка не вылезает, если использую константу в 1 500 000 (строк), а если через переменную передаю 1048574 (строк), то вылезает. Это и взрывает мне мозг.Запускаю функцию Sub...
 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

Добрый день!

Проблема в следующем: все данные с листа помещаю в массив, чтобы их быстрее обработать. На малых объемах все работает хорошо. На больших, близких к граничным, вылезает ошибка «RunTime Error 7 — Out of Memory».

Она вылезает или на ReDim массива, или на присвоении массиву диапазона с листа.

Что странно, так это ошибка не вылезает, если использую константу в 1 500 000 (строк), а если через переменную передаю 1048574 (строк), то вылезает. Это и взрывает мне мозг.

Запускаю функцию Sub StartTransferData() в модуле m2_Main2 в файле (48 Мб):

https://docs.google.com/file/d/0B_GHN7yiYuxELWVSSmJIM3VUczg/edit?usp=sharing

весит много, поэтому через гугл драйв.
Также прикладываю скриншот экрана после нажатия на Debug

Подскажите, пожалуйста, в чем может быть дело и как бороться.

Спасибо

Изменено: axtrace01.02.2013 18:08:48

 

LastRow=1’048’574, LastCol=16’384 всего 17’179’836’416 ячеек; даже всего по одному байту на ячейку — нужно не менее 16Г памяти только на массив.

Изменено: Михаил С.01.02.2013 18:54:26

 

EducatedFool

Пользователь

Сообщений: 3621
Регистрация: 23.12.2012

#3

01.02.2013 18:56:43

Возможно, дело и не в объёме памяти, требуемой для массива,
а где-то в объявлении переменных.

Цитата
использую константу в 1 500 000 (строк)

А в коде написано 150 000
150 тыс — это совсем другое, нежели 1500 000

PS: Через Redim можно изменять только верхнюю размерность массива
А зачем вам 2 строки с Redim?
Уберите первую строку — и всё заработает

Изменено: EducatedFool01.02.2013 19:01:17

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#4

01.02.2013 19:00:51

Цитата
EducatedFool пишет:
Через Redim можно изменять только верхнюю размерность массива

а что такое верхняя размерность массива?

Цитата
EducatedFool пишет:
А зачем вам 2 строки с Redim?
Уберите первую строку — и всё заработает

нет, не заработает. я ее специально добавил, чтобы показать, что если указывать размеры как числа, то все ок.
А если брать их из переменной, то вылетает ошибка.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#5

01.02.2013 19:04:27

Цитата
EducatedFool пишет:
PS: Через Redim можно изменять только верхнюю размерность массива

поправка.
с опцией Preserve.
да и то — не верхнюю, а самую последнюю.
здесь Preserve нет.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#6

01.02.2013 19:05:55

Цитата
axtrace пишет:
я ее специально добавил, чтобы показать, что если указывать размеры как числа, то все ок.

А Вы попробуйте присвоить LastRow значение = 1048574. И LastColumn = 15. Первую строку с ReDim Отключите. Что получится?

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#7

01.02.2013 19:14:52

имхо, 48мб качать никто не будет.
предыдущая строка кода с 150000 строк в массиве — не «доказательство».
чему равно LastCol — тоже неизвестно.

кстати, размеры массива вообще нет нужды определять явно.
попробуйте так:

Код
Dim arr
arr = range(...).value

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#8

01.02.2013 19:17:50

Цитата
Юрий М пишет:
А Вы попробуйте присвоить LastRow значение = 1048574. И LastColumn = 15. Первую строку с ReDim Отключите. Что получится?

Получилось, что при первом вызове функции getArrayFromSheet — той, в которой этот ReDim содержиться — проходит все успешно, но во втором вызове — я несколько массивов формирую с разных листов — опять вылетает та же ошибка. Хотя там точно также присваивается LastRow значение = 1048574. И LastColumn = 15

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#9

01.02.2013 19:20:09

Цитата
ikki пишет: чему равно LastCol — тоже неизвестно.

Известно — число столбцов на листе

Прикрепленные файлы

  • Image 1.gif (29.67 КБ)

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#10

01.02.2013 19:21:51

Цитата
Михаил С. пишет: Известно — число столбцов на листе

нет.
в приведенном фрагменте — зависит от данных во второй строке.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

Утечка памяти? Попробуйте убить массив.

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#12

01.02.2013 19:24:24

Цитата
Михаил С. пишет: Известно — число столбцов на листе

Михаил, не совсем так: это последняя ячейка (номер столбца) по второй строке.

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#13

01.02.2013 19:24:53

Цитата
Юрий М пишет: Утечка памяти? Попробуйте убить массив.

может быть. а как убивают массивы?
только если утечка, после перезагрузки и запуска только excel, все должно было быть чисто и хотя бы раз отработать нормально, но нет — все-равно ошибка. Правда, она то на ReDim, а то на следующей строчке с присваиванием:

nArray = tSheet.Range(tSheet.Cells(1, 1), tSheet.Cells(LastRow, LastCol))

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

Вы сначала объясните — зачем дважды ReDim с одним и тем же nArray?

 

The_Prist

Пользователь

Сообщений: 13997
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#15

01.02.2013 19:37:27

Попробуйте объявлять процедуру так:

Код
getArrayFromSheet(tSheet As Worksheet)

и раскомментируйте строки с объявлением массива и назначением его через функцию. Или массив объявите глобально.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#16

01.02.2013 19:38:03

вообще-то странно  :(
вот у меня winXP, Excel 2003, RAM 3Gb, доступно чуть более 2Gb
массив из 10млн элементов типа Variant занимает ок. 153 Mb
вот такой код отрабатывает:

Код
Sub t()
  Const m& = 500000
  Dim a, b, c, d, e, f

  ReDim a(1 To m, 1 To 20) As Variant
  ReDim b(1 To m, 1 To 20) As Variant
  ReDim c(1 To m, 1 To 20) As Variant
  ReDim d(1 To m, 1 To 20) As Variant
  ReDim e(1 To m, 1 To 20) As Variant
  ReDim f(1 To m, 1 To 20) As Variant
End Sub

вполне штатно — в диспетчере задач при пошаговом режиме выделение памяти увеличивается по 150+ метров… по завершении процедуры — всё самоубивается (массив локальный).
но если я меняю константу m на 600000 — то уже при создании 3-го массива вылетает out of memory
:(
при этом «выделенная память» выросла от 620М до примерно 1Г
а в первый раз — благополучно до 1,6Г

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#17

01.02.2013 19:39:48

Саш, да вообще нужно, как ты советовал:

Код
Dim nArray()
nArray = Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Value
 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#18

01.02.2013 19:42:40

Цитата
Юрий М пишет: Вы сначала объясните — зачем дважды ReDim с одним и тем же nArray?

   

Код
'этот ReDim, чтобы показать что на таких же размерах все работает. Он не нужен в программе, просто показываю, что если так указать, то все ок. Его я удалю. Поставил его после обнаружения ошибки. На нем ошибки нет
   ReDim nArray(1 To 1500000, 1 To 15) As Variant
    
'это основной ReDim, он будет и дальше. Он динамически расширяет массив в зависимост от размеров данных на листе, которые туда будут помещаться. 
       ReDim nArray(1 To LastRow, 1 To LastCol) As Variant

Первый — для примера. На нем не вылезает ошибка.
А вот на втором — вылезает, даже если первый закомментен. Может быть это поможет локализовать проблему.

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#19

01.02.2013 19:44:42

Цитата
axtrace пишет:
Он динамически расширяет массив в зависимост от размеров данных на листе, которые туда будут помещаться.

Так и объявляйте сразу динамический массив (см. мой пост выше) — и ReDim’мить не придётся.

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#20

01.02.2013 19:45:30

Цитата
axtrace пишет: этот ReDim, чтобы показать что на таких же размерах все работает.

Неправда — совсем разные размеры.

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#21

01.02.2013 19:47:50

Цитата
Юрий М пишет:
Dim nArray()
nArray = Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Value

то есть просто убрать ReDim? Я так сделал, у меня в массив записалось <Out of memory>, программа благополучно продолжила работать, но вылезла ошибка о несуществовании объекта в дальнейшем, при попытке перенести данные из этого массива в другой

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#22

01.02.2013 19:50:52

Цитата
Юрий М пишет: Неправда — совсем разные размеры.

я опечатался, вместо 1 500 000 указал 150 000. В файле уже исправил, все равно этот ReDim берет, на втором — ошибка

 

Юрий М

Модератор

Сообщений: 60390
Регистрация: 14.09.2012

Контакты см. в профиле

#23

01.02.2013 19:58:48

Цитата
axtrace пишет: то есть просто убрать ReDim?

Объявите массив, как указано, и присвойте ему значения из диапазона листа — никакой ошибки быть не должно. Не «просто убрать RedIm», а записать: массив = …

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#24

01.02.2013 19:59:17

Цитата
ikki пишет: но если я меняю константу m на 600000 — то уже при создании 3-го массива вылетает out of memory

может быть это ограничение разметки памяти в vba?

 

The_Prist

Пользователь

Сообщений: 13997
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Я полагаю проблема в том, что массив передается в процедуру ссылкой. А в этом случае память не высвобождается — VBA считает, что мы вроде как далее будем использовать переменную. И при повторном обращении с передачей ссылки у нас выделенный размер памяти может «слегка» увеличиватся.
В общем попробуйте объявить массив глобально и в процедуре просто переназначать ему значения.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#26

01.02.2013 21:52:01

А мне кажется, дело в простой нехватке физической памяти. Например, такой массив

Код
Sub test()
ReDim a(1000000, 30) As Byte
End Sub

на моем компе (win7, off 2010, 2 G) срабатывает, а такой

Код
Sub test()
ReDim a(1000000, 30) 
End Sub

—  «RunTime Error 7 — Out of Memory»

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#27

01.02.2013 22:00:03

Цитата
The_Prist пишет: И при повторном обращении с передачей ссылки у нас выделенный размер памяти может «слегка» увеличиватся

там же только адрес, откуда вызывается и адреса памяти массивов (по ссылке передаются параметры функции). это вроде бы немного.
я попробовал, не помогло  :(  Все работает так же, как раньше.

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

#28

01.02.2013 22:01:35

Цитата
Михаил С. пишет:  моем компе (win7, off 2010, 2 G)

странно. у меня win7, off2010, 4Gb
файл подкачки — 3,6 Gb

 

axtrace

Пользователь

Сообщений: 23
Регистрация: 11.01.2013

попробую я, в общем, делать кусками. Брать массив тысяч в 100 строк, преобразовывать его, записывать на новый лист, переходить к следующим 100 тыс. строк… Время, конечно, увеличится. Но хоть какое-то решение у меня будет.

все большое спасибо за идеи! Надеюсь, вам пригодится где-нибудь когда-нибудь :)

 

SvetaS_love

Пользователь

Сообщений: 132
Регистрация: 14.07.2015

#30

14.07.2015 20:39:10

Добрый День!
Помогите пожалуйста. У меня тоже эта  проблема но Excel 2016 ошибку тоже даёт Redim
на  111 533 строках и 1635 столбцах

Код
Dim text_word2() As Variant
x=1635
 ReDim text_word2(0 To kki, 0 To x)

Как решили прошлую проблему?

одинокий странник

Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.

zafon
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 04.07.2003 (Пт) 4:48
Откуда: AKKO,Israel

Run-time error ‘7’ : Out of memory

Подскажите что делать с этой проблемой:

Уже не первая моя программа выдаёт при запуске

«Run-time error ‘7’ : Out of memory»

Т.е. у моего друга (по его словам) одна из моих программ при загрузке давала эту ошибку.Но это было уже давно (4-5месяцев назад)!

У него стоял МИЛЕНИУМ и я погрешил на систему и не придал этому значения , да и у других людей которые пользовались моей програмой небыло ни каких проблем. На этом я успокоился…

Но вот полторы недели назад я закончил очень важный для меня проэкт. Он находился (перед публикацией) на двухнедельном тэстировании. Ни у кого из тэстеров небыло никаких проблем , и тут вчера (04.04.04) я запускаю программу (как обычно) и… получаю —

«Run-time error ‘7’ : Out of memory»

Ладно, думаю, сейчас запущу ‘VB’ и проверю в чем проблема.

Запускается ‘VB’ и «говорит» мне:

-MsgBox Caption «VBDataViewWindow»

и ниже:

«Out of memory. Continue? »

Y/N

Т.е. по логике в моём коде нет проблем , проблема с ‘VB’ в системе.

У других ребят программа работает без проблем.

Комп. : P4-(Intel1.8-Asus266), RAM-256 HD8Mb-120G Win.XP

т.е. проблем со скоростью и памятью не должно быть …

Комп перегружал всё равно ошибка ……….

Установлен пакет «Microsoft Visual Studio 6.0».

Может что-то произошло с «msvbvm60.dll» Я идиот! Убейте меня, кто-нибудь!………

Помогите , очень Вас прошу!!!

Пишите сюда или

zafon@nm.ru

Зарание блогодарен за любые высказывания .

С ув. «ViC» !!!


Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск
  • ICQ

Сообщение Kostyan » 06.04.2004 (Вт) 0:15

Я при подобных подозрениях на VB удалил бы его подчистую и установил заново.

Нет ничего невозможного для человека с интеллектом.


Cyrax
Cyberninja
Cyberninja
Аватара пользователя

 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia
  • Сайт
  • ICQ

Сообщение Cyrax » 06.04.2004 (Вт) 9:53

а я бы, для начала, на код взглянул…

да и все остальные, наверное, тоже не отказались бы от этого :)

Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно… (озадаченно) А это в какую сторону тянуть? Ну-ка… Ага, этот был лишний, этот вообще не отсюда, и этот… Точно, два болта.

Welcome to IRC


zafon
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 04.07.2003 (Пт) 4:48
Откуда: AKKO,Israel

Сообщение zafon » 06.04.2004 (Вт) 11:13

Да,конечно удалить ‘VB’ , а затем переустановить не проблема.

Это логично.

Но ведь нужно знать причину — почему это случилось.

Клиент не может удалить ‘VB’ с ситемы а затем переустановить.

(Что подразумеватся удалить ‘VB’ с ситемы клиента — это разрегистрация всех библиотек и контролов , а затем их удаление.)

Повторная переустановка моей программы не помогает…

(Т.е. Uninstall -> Install )

Есть проблема с ‘VB’ в системе.

Просто хочется перестраховаться и включить в инсталяцию нужные файлы или специальную опперацию , которая устранила бы эту проблему у пользователя , при повторной переустановки моей программы .

Замена и перерегистрация в системе msvbvm60.dll не устраняет проблему…

Тэстеры говорят что программа работает без сбоев — КОД «чистый» .

Только у меня есть эта проблема…


hCORe
VB — Экстремал
VB - Экстремал
Аватара пользователя

 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory
  • Сайт
  • ICQ

Сообщение hCORe » 06.04.2004 (Вт) 11:20

http://amelso.narod.ru/gluk.htm писал(а):Run-time error ‘6’: Out of memory

Причина ошибки: программе не хватает виртуальной памяти для инициализации или при выполнении каких-либо операций.

Устранение ошибки: Увеличить размер файла подкачки на жестком диске. См. Пуск—Панель управления—Производительность и обслуживание—Система—Дополнительно—Параметры быстродействия в Windows 2000 и XP и Пуск—Настройка—Панель управления—Система—Дополнительно—Виртуальная память для Windows 9x/ME. После этого перезагрузить компьютер для снятия проблемы.

Моду создают модоки, а распространяют модозвоны.


zafon
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 04.07.2003 (Пт) 4:48
Откуда: AKKO,Israel

Сообщение zafon » 06.04.2004 (Вт) 12:23


hCORe
VB — Экстремал
VB - Экстремал
Аватара пользователя

 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory
  • Сайт
  • ICQ

Сообщение hCORe » 06.04.2004 (Вт) 12:25

Переустанови VB, не поможет — снеси ко всем чертям систему и поставь заново :roll:

Моду создают модоки, а распространяют модозвоны.


Cyrax
Cyberninja
Cyberninja
Аватара пользователя

 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia
  • Сайт
  • ICQ

Сообщение Cyrax » 06.04.2004 (Вт) 12:40

hCORe писал(а):снеси ко всем чертям систему и поставь заново :roll:

боюсь, и это не поможет…

Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно… (озадаченно) А это в какую сторону тянуть? Ну-ка… Ага, этот был лишний, этот вообще не отсюда, и этот… Точно, два болта.

Welcome to IRC


zafon
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 04.07.2003 (Пт) 4:48
Откуда: AKKO,Israel

Сообщение zafon » 06.04.2004 (Вт) 13:47

Это выглядит так.

_____________________________________________________________

Опять же говорю: снести , переустановить,поломать ,скрушить и т.д. (незная в что привело к ошибке) — это не проблема.

Да и программа (без изминений кода) проработала полторы недели без ошибок.

Просто хочется сделать так что бы пользователь , у которого возникла такая проблема , мог с помощью повторной переустановки моей программы — ИСПРАВИТЬ ЭТУ ОШИБКУ , а не удалять систему и заново её переустанавливать , только для того чтобы пользоваться

программой .

Да и делая выводы из «скриншотов» , я думаю что это может возникнуть у любого из нас кто пишет на VB .


Cyrax
Cyberninja
Cyberninja
Аватара пользователя

 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia
  • Сайт
  • ICQ

Сообщение Cyrax » 06.04.2004 (Вт) 13:52

а что такое «VBDataViewWindow»?

Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно… (озадаченно) А это в какую сторону тянуть? Ну-ка… Ага, этот был лишний, этот вообще не отсюда, и этот… Точно, два болта.

Welcome to IRC


alibek
Большой Человек
Большой Человек
 
Сообщения: 14204
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.04.2004 (Вт) 13:54

Имеется ли в проекте Coolbar (из Microsoft Common Controls-3)? Просто он себя в некоторых случаях нехорошо ведет и рушит IDE.

Да, и еще. После того, как VB загрузиться, зайди в Add-Ins-=менеджер и поотключай все плугины.

Lasciate ogni speranza, voi ch’entrate.


hCORe
VB — Экстремал
VB - Экстремал
Аватара пользователя

 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory
  • Сайт
  • ICQ

Сообщение hCORe » 06.04.2004 (Вт) 14:14

VBDataViewWindow — это малополезное окошко просмотра соединений с БД. Оно иногда глючит по-страшному :oops: В поставке с VB есть DLL dataview.dll, попробуй ее переименовать и все встанет на свои места :!:

Моду создают модоки, а распространяют модозвоны.


Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва
  • ICQ

Сообщение Ennor » 06.04.2004 (Вт) 14:16

Насчет кулбара — это верно, но он все-таки не так зверствует, только если его пытаются внутри собственного контрола использовать (сам попадался…). А вообще очень похоже на запуск среды под аккаунтом с _очень_ ограниченными правами (типа Guest). Либо, если это не так, начинай тщательно тестить все железо. Да, надеюсь, пятый сервис-пак на студию у тебя стоит…

А почему слетело? Да миллион причин. Реестр накрылся, NTOSKRNL.EXE перекочевряжило, да что угодно.


zafon
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 04.07.2003 (Пт) 4:48
Откуда: AKKO,Israel

Сообщение zafon » 06.04.2004 (Вт) 14:23

alibek писал(а):Имеется ли в проекте Coolbar (из Microsoft Common Controls-3)? Просто он себя в некоторых случаях нехорошо ведет и рушит IDE.

Да, и еще. После того, как VB загрузиться, зайди в Add-Ins-=менеджер и поотключай все плугины.

Add-Ins — всё отключено .

На счёт «Microsoft Common Controls-3» моё приложение использует:

— MSCOMCT2.OCX

— MSCOMCTL.OCX

— shdocvw.dll

— comdlg32.ocx

Да и если VB «ругается» то моя программа не причём… Что-то с библиотеками VB или реестр…

___________________________________________________________

Cyrax-

VBDataViewWindow — без понятия , но его *.dll файлы находятся в папке VB .

___________________________________________________________

Странно это всё ???…


hCORe
VB — Экстремал
VB - Экстремал
Аватара пользователя

 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory
  • Сайт
  • ICQ

Сообщение hCORe » 06.04.2004 (Вт) 14:25

Ennor писал(а):NTOSKRNL.EXE перекочевряжило

Да нет, скорее NTLDR кто-то переименовал или удалил :twisted:

Моду создают модоки, а распространяют модозвоны.


zafon
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 04.07.2003 (Пт) 4:48
Откуда: AKKO,Israel

Сообщение zafon » 06.04.2004 (Вт) 17:06


Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26
  • ICQ

Сообщение Amed » 06.04.2004 (Вт) 20:28

Точно. Как-то делал программу на конкурс (конференцию), и за 2 дня до сдачи она у меня начала выдавать «Out of memory». Перепугался я страшно, но, кажется, дело было в собственных контролах, случайно изменив которые, я восстановил работоспособность… А то точно была бы «Catastrophic failure» :wink:


codemaster
Постоялец
Постоялец
Аватара пользователя

 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 07.04.2004 (Ср) 14:36

zafon писал(а):

alibek писал(а):Да и если VB «ругается» то моя программа не причём… Что-то с библиотеками VB или реестр…
Странно это всё ???…

Есть ли в твоей проге UserControls ?



Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

В этой статье представлена ошибка с номером Ошибка 7, известная как Ошибка Microsoft Access 7, описанная как Недостаточно памяти.

О программе Runtime Ошибка 7

Время выполнения Ошибка 7 происходит, когда Microsoft Access дает сбой или падает во время запуска, отсюда и название. Это не обязательно означает, что код был каким-то образом поврежден, просто он не сработал во время выполнения. Такая ошибка появляется на экране в виде раздражающего уведомления, если ее не устранить. Вот симптомы, причины и способы устранения проблемы.

Определения (Бета)

Здесь мы приводим некоторые определения слов, содержащихся в вашей ошибке, в попытке помочь вам понять вашу проблему. Эта работа продолжается, поэтому иногда мы можем неправильно определить слово, так что не стесняйтесь пропустить этот раздел!

  • Доступ — НЕ ИСПОЛЬЗУЙТЕ этот тег для Microsoft Access, используйте вместо него [ms-access]
  • Память — используйте этот тег для управления памятью или проблем в программировании
  • Access — Microsoft Access, также известный как Microsoft Office Access, представляет собой систему управления базами данных от Microsoft, которая обычно сочетает в себе реляционное ядро ​​СУБД Microsoft JetACE с графический пользовательский интерфейс и инструменты разработки программного обеспечения.
  • Доступ к Microsoft — Microsoft Access, также известный как Microsoft Office Access, представляет собой систему управления базами данных от Microsoft, которая обычно объединяет реляционный Microsoft JetACE Компонент Database Engine с графическим пользовательским интерфейсом и инструментами для разработки программного обеспечения

Симптомы Ошибка 7 — Ошибка Microsoft Access 7

Ошибки времени выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране при любом запуске %программы%. Фактически, сообщение об ошибке или другое диалоговое окно может появляться снова и снова, если не принять меры на ранней стадии.

Возможны случаи удаления файлов или появления новых файлов. Хотя этот симптом в основном связан с заражением вирусом, его можно отнести к симптомам ошибки времени выполнения, поскольку заражение вирусом является одной из причин ошибки времени выполнения. Пользователь также может столкнуться с внезапным падением скорости интернет-соединения, но, опять же, это не всегда так.

Fix Ошибка Microsoft Access 7 (Error Ошибка 7)
(Только для примера)

Причины Ошибка Microsoft Access 7 — Ошибка 7

При разработке программного обеспечения программисты составляют код, предвидя возникновение ошибок. Однако идеальных проектов не бывает, поскольку ошибки можно ожидать даже при самом лучшем дизайне программы. Глюки могут произойти во время выполнения программы, если определенная ошибка не была обнаружена и устранена во время проектирования и тестирования.

Ошибки во время выполнения обычно вызваны несовместимостью программ, запущенных в одно и то же время. Они также могут возникать из-за проблем с памятью, плохого графического драйвера или заражения вирусом. Каким бы ни был случай, проблему необходимо решить немедленно, чтобы избежать дальнейших проблем. Ниже приведены способы устранения ошибки.

Методы исправления

Ошибки времени выполнения могут быть раздражающими и постоянными, но это не совсем безнадежно, существует возможность ремонта. Вот способы сделать это.

Если метод ремонта вам подошел, пожалуйста, нажмите кнопку upvote слева от ответа, это позволит другим пользователям узнать, какой метод ремонта на данный момент работает лучше всего.

Обратите внимание: ни ErrorVault.com, ни его авторы не несут ответственности за результаты действий, предпринятых при использовании любого из методов ремонта, перечисленных на этой странице — вы выполняете эти шаги на свой страх и риск.

Метод 1 — Закройте конфликтующие программы

Когда вы получаете ошибку во время выполнения, имейте в виду, что это происходит из-за программ, которые конфликтуют друг с другом. Первое, что вы можете сделать, чтобы решить проблему, — это остановить эти конфликтующие программы.

  • Откройте диспетчер задач, одновременно нажав Ctrl-Alt-Del. Это позволит вам увидеть список запущенных в данный момент программ.
  • Перейдите на вкладку «Процессы» и остановите программы одну за другой, выделив каждую программу и нажав кнопку «Завершить процесс».
  • Вам нужно будет следить за тем, будет ли сообщение об ошибке появляться каждый раз при остановке процесса.
  • Как только вы определите, какая программа вызывает ошибку, вы можете перейти к следующему этапу устранения неполадок, переустановив приложение.

Метод 2 — Обновите / переустановите конфликтующие программы

Использование панели управления

  • В Windows 7 нажмите кнопку «Пуск», затем нажмите «Панель управления», затем «Удалить программу».
  • В Windows 8 нажмите кнопку «Пуск», затем прокрутите вниз и нажмите «Дополнительные настройки», затем нажмите «Панель управления»> «Удалить программу».
  • Для Windows 10 просто введите «Панель управления» в поле поиска и щелкните результат, затем нажмите «Удалить программу».
  • В разделе «Программы и компоненты» щелкните проблемную программу и нажмите «Обновить» или «Удалить».
  • Если вы выбрали обновление, вам просто нужно будет следовать подсказке, чтобы завершить процесс, однако, если вы выбрали «Удалить», вы будете следовать подсказке, чтобы удалить, а затем повторно загрузить или использовать установочный диск приложения для переустановки. программа.

Использование других методов

  • В Windows 7 список всех установленных программ можно найти, нажав кнопку «Пуск» и наведя указатель мыши на список, отображаемый на вкладке. Вы можете увидеть в этом списке утилиту для удаления программы. Вы можете продолжить и удалить с помощью утилит, доступных на этой вкладке.
  • В Windows 10 вы можете нажать «Пуск», затем «Настройка», а затем — «Приложения».
  • Прокрутите вниз, чтобы увидеть список приложений и функций, установленных на вашем компьютере.
  • Щелкните программу, которая вызывает ошибку времени выполнения, затем вы можете удалить ее или щелкнуть Дополнительные параметры, чтобы сбросить приложение.

Метод 3 — Обновите программу защиты от вирусов или загрузите и установите последнюю версию Центра обновления Windows.

Заражение вирусом, вызывающее ошибку выполнения на вашем компьютере, необходимо немедленно предотвратить, поместить в карантин или удалить. Убедитесь, что вы обновили свою антивирусную программу и выполнили тщательное сканирование компьютера или запустите Центр обновления Windows, чтобы получить последние определения вирусов и исправить их.

Метод 4 — Переустановите библиотеки времени выполнения

Вы можете получить сообщение об ошибке из-за обновления, такого как пакет MS Visual C ++, который может быть установлен неправильно или полностью. Что вы можете сделать, так это удалить текущий пакет и установить новую копию.

  • Удалите пакет, выбрав «Программы и компоненты», найдите и выделите распространяемый пакет Microsoft Visual C ++.
  • Нажмите «Удалить» в верхней части списка и, когда это будет сделано, перезагрузите компьютер.
  • Загрузите последний распространяемый пакет от Microsoft и установите его.

Метод 5 — Запустить очистку диска

Вы также можете столкнуться с ошибкой выполнения из-за очень нехватки свободного места на вашем компьютере.

  • Вам следует подумать о резервном копировании файлов и освобождении места на жестком диске.
  • Вы также можете очистить кеш и перезагрузить компьютер.
  • Вы также можете запустить очистку диска, открыть окно проводника и щелкнуть правой кнопкой мыши по основному каталогу (обычно это C :)
  • Щелкните «Свойства», а затем — «Очистка диска».

Метод 6 — Переустановите графический драйвер

Если ошибка связана с плохим графическим драйвером, вы можете сделать следующее:

  • Откройте диспетчер устройств и найдите драйвер видеокарты.
  • Щелкните правой кнопкой мыши драйвер видеокарты, затем нажмите «Удалить», затем перезагрузите компьютер.

Метод 7 — Ошибка выполнения, связанная с IE

Если полученная ошибка связана с Internet Explorer, вы можете сделать следующее:

  1. Сбросьте настройки браузера.
    • В Windows 7 вы можете нажать «Пуск», перейти в «Панель управления» и нажать «Свойства обозревателя» слева. Затем вы можете перейти на вкладку «Дополнительно» и нажать кнопку «Сброс».
    • Для Windows 8 и 10 вы можете нажать «Поиск» и ввести «Свойства обозревателя», затем перейти на вкладку «Дополнительно» и нажать «Сброс».
  2. Отключить отладку скриптов и уведомления об ошибках.
    • В том же окне «Свойства обозревателя» можно перейти на вкладку «Дополнительно» и найти пункт «Отключить отладку сценария».
    • Установите флажок в переключателе.
    • Одновременно снимите флажок «Отображать уведомление о каждой ошибке сценария», затем нажмите «Применить» и «ОК», затем перезагрузите компьютер.

Если эти быстрые исправления не работают, вы всегда можете сделать резервную копию файлов и запустить восстановление на вашем компьютере. Однако вы можете сделать это позже, когда перечисленные здесь решения не сработают.

Другие языки:

How to fix Error 7 (Microsoft Access Error 7) — Out of memory.
Wie beheben Fehler 7 (Microsoft Access-Fehler 7) — Aus dem Gedächtnis.
Come fissare Errore 7 (Errore di Microsoft Access 7) — Fuori dalla memoria.
Hoe maak je Fout 7 (Microsoft Access-fout 7) — Geen geheugen.
Comment réparer Erreur 7 (Erreur d’accès Microsoft 7) — Mémoire insuffisante.
어떻게 고치는 지 오류 7 (마이크로소프트 액세스 오류 7) — 메모리가 부족합니다.
Como corrigir o Erro 7 (Erro 7 do Microsoft Access) — Fora da memória.
Hur man åtgärdar Fel 7 (Microsoft Access Error 7) — Slut på minne.
Jak naprawić Błąd 7 (Błąd Microsoft Access 7) — Brak pamięci.
Cómo arreglar Error 7 (Error 7 de Microsoft Access) — Sin memoria.

The Author Об авторе: Фил Харт является участником сообщества Microsoft с 2010 года. С текущим количеством баллов более 100 000 он внес более 3000 ответов на форумах Microsoft Support и создал почти 200 новых справочных статей в Technet Wiki.

Следуйте за нами: Facebook Youtube Twitter

Последнее обновление:

17/08/22 09:59 : Пользователь Android проголосовал за то, что метод восстановления 1 работает для него.

Рекомендуемый инструмент для ремонта:

Этот инструмент восстановления может устранить такие распространенные проблемы компьютера, как синие экраны, сбои и замораживание, отсутствующие DLL-файлы, а также устранить повреждения от вредоносных программ/вирусов и многое другое путем замены поврежденных и отсутствующих системных файлов.

ШАГ 1:

Нажмите здесь, чтобы скачать и установите средство восстановления Windows.

ШАГ 2:

Нажмите на Start Scan и позвольте ему проанализировать ваше устройство.

ШАГ 3:

Нажмите на Repair All, чтобы устранить все обнаруженные проблемы.

СКАЧАТЬ СЕЙЧАС

Совместимость

Требования

1 Ghz CPU, 512 MB RAM, 40 GB HDD
Эта загрузка предлагает неограниченное бесплатное сканирование ПК с Windows. Полное восстановление системы начинается от $19,95.

ID статьи: ACX07284RU

Применяется к: Windows 10, Windows 8.1, Windows 7, Windows Vista, Windows XP, Windows 2000

Совет по увеличению скорости #47

Оптимизируйте Windows с помощью средства устранения неполадок производительности:

Оптимизируйте свой компьютер с Windows 7 и Windows 10 с помощью средства устранения неполадок производительности для повышения скорости работы. Этот инструмент может находить проблемы и предлагать действенные решения по их устранению. Просто введите «средство устранения неполадок» в поле поиска на панели управления.

Нажмите здесь, чтобы узнать о другом способе ускорения работы ПК под управлением Windows

Одобрено: ASR Pro

  • 1. Загрузите ASR Pro и установите его на свой компьютер.
  • 2. Запустите программу и нажмите «Сканировать»
  • 3. Нажмите «Восстановить», чтобы устранить обнаруженные проблемы.
  • Повысьте производительность вашего компьютера с помощью этой простой загрузки. г.

    Вы можете получить сообщение об ошибке, в котором говорится, что Microsoft Visual Basic Runtime Error 7 не хватает памяти. Что ж, есть несколько способов решить эту ошибку, и мы поговорим о них за минуту.Ошибка VBA 2 (недостаточно памяти) возникает, когда всей вашей системе не хватает ресурсов для поддержки Excel для запуска определенного макроса. Когда вы открываете приложение на своей хорошей платформе, которое является частью мощной программы, и вам нужно попытаться запустить абсолютный макрос, а имеющихся у вас ресурсов меньше, чем достаточно, вы получите ошибку 7.

    <основной><дел><дел><ул>

  • 2 короткие минуты воспроизведения
  • Требуется больше памяти, чем может быть доступно, наряду с ограничением кучи в 64 КБ. Эта ошибка имеет следующие причины и решения:

    <ул>

  • Вы открыли слишком много приложений, документации или исходных файлов. Закройте все ненужные приложения, документы или файлы питания, если они открыты.

  • У вас есть значительный модуль или процедура. Разделите псевдонимы процедур среди больших модулей на более мелкие. Это не экономит память, но может предотвратить достижение лимита сегментов в шестьдесят четыре КБ.

  • Вы представляете Microsoft и используете Windows в показанном подходе. Перезапустите Microsoft Windows в повышенном режиме.

  • Возможно, вы используете Microsoft Windows в расширенной среде, виртуальная память заполнена. Увеличьте цифровую память, освободив место на диске или, по крайней мере, убедитесь, что место на диске доступно.

  • Они предоставляют стационарные программы. Удалить TSR.

  • Одобрено: ASR Pro

    ASR Pro — самый популярный и эффективный в мире инструмент для ремонта ПК. Миллионы людей доверяют ему обеспечение быстрой, бесперебойной и безошибочной работы своих систем. Благодаря простому пользовательскому интерфейсу и мощному механизму сканирования ASR Pro быстро находит и устраняет широкий спектр проблем Windows — от нестабильности системы и проблем с безопасностью до проблем с управлением памятью и производительностью.

  • 1. Загрузите ASR Pro и установите его на свой компьютер.
  • 2. Запустите программу и нажмите «Сканировать»
  • 3. Нажмите «Восстановить», чтобы устранить обнаруженные проблемы.
  • Вы загрузили много процессов драйвера. Избавьтесь от ненужных технологических драйверов.

  • У вас есть свободное место для общедоступных переменных. Сократите количество общедоступных переменных.

  • Вы пытались изменить дизайн ресурса, доступного только для чтения. Не присваивайте значения свойствам, доступным только для чтения.

  • Для получения дополнительной информации, а также определения элемента в и нажмите F1 (в Windows) или ПОМОЩЬ (в Macintosh).

    Поддержка и обратная связь

    Есть вопросы или хотите оставить отзыв об Office VBA или этих файлах сведений? См. отзывы службы поддержки Office VBA и многое другое для получения справки, а также отзывы.

    Требуется больше памяти по сравнению с безопасным доступом или ранее сталкивался с этим ограничением сегмента 64 КБ. Эта ошибка имеет один раз причины и решения:

    <ул>

  • Microsoft Visual Basic of Learning error 7 out of memory

    Вы открыли слишком много приложений, статей или исходных файлов. Закройте все попавшие в ненужные приложения изображения, документы или исходные файлы.

  • У вас есть основной невероятно большой модуль или процедура. Разделите большие флип-процедуры, а иногда и на более мелкие. Хотя это превосходное решение не экономит место на диске, оно может привести к превышению предела сегмента в 64 КБ из-за того, что достигнут предел.

  • Как исправить ошибку воспроизведения 7 из памяти в VBA?

    Требовалось больше отзывов, чем было возможно, или приветствовалось ограничение кучи в шестьдесят четыре КБ. Эта ошибка имеет следующие причины и решения: Вы создали слишком много приложений, файлов или исходных файлов. Закройте все ненужные приложения, документы или исходные файлы, многие из которых, как вы уверены, будут открыты.

    Вы представляете Microsoft и используете Windows в исходном режиме. Перезапустите Microsoft Windows в обновленном режиме.

  • Вы используете Microsoft Windows в расширенном режиме, но виртуальная память, несомненно, заполнена. Увеличьте виртуальную память, освободив комнату или жилую площадь на DVD, или, по крайней мере, убедитесь, что у вас достаточно свободного места.

  • У них есть программы, которые помогут вам поддержать программы отпуска и проживания для резидентов. Удалить TSR.

  • Вы скачали много драйверов Kindle. Получите потерю ненужных драйверов устройств.

  • Как управлять Исправить ошибку нехватки памяти?

    У вас есть место для общедоступных переменных. Уменьшите число out общедоступных переменных.

  • Почему говорит ли VBA о нехватке памяти?

    Вы пытались обновить свойство, доступное только для чтения. Не присваивайте значения свойствам, доступным только для чтения.

  • Чтобы получить больше информации, выберите элемент в проблемной ситуации и поочередно нажмите F1 (в Windows) или иногда ПОМОЩЬ (в Macintosh).

    Поддержка и обратная связь

    Есть ли у вас какие-либо вопросы и/или комментарии об Office VBA в дополнение к этим документам? См. раздел Office VBA и раскрытие отзывов, чтобы узнать, как получать и оплачивать отзывы.

    <ул>

  • 2 минуты для успешного чтения
  • Предупреждение. Прежде чем читать этот уникальный пост, я настоятельно рекомендую вам посетить эту мою любимую страницу ресурсов, чтобы получить доступ к гаджетам и службам, которые я использую не только для защиты своей системы, но и для поддержания своей стратегии. , использование уведомлений. все ошибки, включая мой компьютер, нажав здесь!

    Microsoft Plastic Basic Runtime error 7 out of memory

    Сбои во время выполнения обычно возникают, когда определенные процессы или только видео, необходимые определенному приложению, были удалены или повреждены.

    Как исправить ошибка нехватки памяти в VBA?

    Ошибка времени выполнения — довольно распространенная ошибка, возникающая через случайные промежутки времени при использовании корпоративного компьютера. Это может появиться с ошибкой «Недостаточно памяти» и внезапно закрыть любое приложение, которое вы используете в настоящее время. Ошибка выполнения 7 в основном возникает из-за проблемы в моем приложении для кодирования. Так что это просто результат плохо спроектированных интерфейсов интернет-сайтов или ошибка программирования. Кроме того, вы обнаружите, что в большинстве случаев утечка памяти не имеет ничего общего с ошибкой, правда, конкретное сообщение об ошибке может указывать на то, что проблема обычно связана с памятью.

    Как исправить ошибку выполнения 7 из-за нехватки памяти?

    В основном распространенное сообщение об ошибке, с которым сталкивается конечный пользователь, относится к следующему продукту:

    Ошибка выполнения 7: разработка по памяти

    Давайте кратко рассмотрим причину этой ошибки. Одной из основных причин возникновения ошибки времени выполнения 7 является просто опасный файл FM20.dll. Файл FM20.dll используется Visual For Basic для кодирования определенных конструкций и функций в приложении.

    Повысьте производительность вашего компьютера с помощью этой простой загрузки. г.

    Как исправить ошибка памяти в VBA?

    Закройте ненужные приложения, документы, а также файлы инструментов.Удалите ненужные элементы управления и формы, чтобы меньше людей могли загружать файлы одновременно.Уменьшите количество публичных переменных.Проверьте доступное место на жестком диске.Увеличьте свободную оперативную память, установив дополнительную память или время от времени перераспределяя память.

    Почему VBA говорит вне память?

    «Недостаточно памяти» никогда не зависит от ограничения размера конкретной программы; Наоборот, это свидетельствует о том, что ваша программа пытается использовать весь элемент памяти в системе. Чаще всего это происходит в безудержной петле собственного числа людей.

    Что обычно представляет собой ошибка времени выполнения 7 ?

    Это буквально именно то, что он говорит, недостаточно памяти. Имейте в виду, что если вы запускали другие макросы, которые копируют информацию в буфер обмена, у вас будет меньше свободной оперативной памяти для запуска макроса всего тела.

    Что означает ошибка времени выполнения 3 не хватает памяти?

    После запуска вашего макроса я получаю ошибку времени выполнения 7 Out, которая, вероятно, будет связана с памятью. После отладки он находится на этой телефонной линии: пусть код запускает список терминалов аэропорта с долготой и широтой на сайте, записывает сегменты линий, которые в конечном итоге интерпретируются всякий раз, когда круги, и конвертирует их в .KML (который, безусловно, читается Google Земля Про). ).

    Почему моя форма VB говорит памяти?

    Хотя сообщение об ошибке United States . S Если у вас мало памяти, у вас значительно больше шансов исчерпать ресурсы (по умолчанию все элементы управления в форме VB используют какой-то другой дескриптор окна), поэтому, если вы регулярно ремонтируете достаточно, чтобы иметь много внешних окон или много элементов управления на вашем торце, это может отображаться на вашем сайте. Наконец-то я нашел главную проблему. Мне нужно включить файл riched20.dll в мой пакет.

    г.

    RunTime Error 7 — Out of Memory  на ReDim массива VBA Excel 64

    Добрый день! 

    Проблема в следующем: все данные с листа помещаю в массив, чтобы их быстрее обработать. На малых объемах все работает хорошо. На больших, близких к граничным, вылезает ошибка «RunTime Error 7 — Out of Memory». 

    Она вылезает или на ReDim массива, или на присвоении массиву диапазона с листа. 

    ПАМЯТИ 8 ГБ, Excel 64 РАЗРЯДНЫЙ, ОПЕРАЦИОНКА 64 РАЗРЯДНАЯ,Excel 2016
    ошибку даёт Redim на 111 533 строках и 1635 столбцах 

    на объёме маленьком ошибку не даёт (до 100 строк и до 100 столбцов) — работает нормально……

    Если ошибку отлавливать 

    On Error Resume Next
    If Err.Number <> 0 Then
    Err.Clear
    End If

    — то Excel виснит и  уходит в бесконечный цикл, постоянно увеличивая  занимаемую память. 

    код 
    Dim text_word2() As Variant
    x=1635
    ReDim text_word2(0 To kki, 0 To x)- место ошибки

    полный код:

    Private Sub CommandButton3_Click()
    Dim n As Long
    Dim nn As Long
    Dim find As String
    Dim kki, kkj As Integer
    
    Dim k, kk, ii, i, j, jj, l, ll, jjj, i1, i2, kkk, j1, j2, j3, i3, jj3, eqmax As Long
    Dim ii_find, jj_find, ii_text, jj_text As Long
    Dim Txt, txt2, txt_p, txt_col, txt_row, txt_out As String
    
    
         Dim Rng_find As Range
         Dim Rng_text As Range
         Dim Rng_substitution As Range
         Dim Rng_out As Range
         Dim theRange_out As Range
         Dim Delimiter As String
    
        Dim Find_word() As String
        Dim Find_word2() As String
        Dim text_word1() As String
        Dim text_word2() As Variant
    
        On Error Resume Next
        Set Rng_find = Range(RefEdit1.Value)
    
        Set Rng_text = Range(RefEdit2.Value)
        Set Rng_substitution = Range(RefEdit3.Value)
        Set Rng_out = Range(RefEdit4.Value)
        Delimiter = Me.TextBox1
            
        On Error GoTo 0
         
        
        If Rng_find Is Nothing Then
            MsgBox "вы не выбрали диапазон какие данные ищем"
            Err.Clear
        Else
        If Rng_text Is Nothing Then
            MsgBox "вы не выбрали диапазон в котором ищем данные "
            Err.Clear
        Else
        
          If Rng_out Is Nothing Then
             MsgBox "вы не выбрали диапазон куда выводить данные"
             Err.Clear
          Else
        
        Application.ScreenUpdating = False
        
        
          
        If myWord(Rng_text).imyRows > myWord(Rng_text).imyColumns Then 'если строк больше чем столбцов в тексте в котором ищем
        
       'раскладываем по словам искомый диапазон
        ii_find = myWord(Rng_find).imyRows
        jj_find = myWord(Rng_find).imyColumns
        
        
        ReDim Find_word(1 To ii_find, 0 To jj_find) ' 0-вой столбец фраза целиком
        Find_word = myWord(Rng_find).iFindword
        
         ' переводим в массив 2-ух строк
         ' 0 строка фраза целиком
         ' 1 строка разложение по словам
        ReDim Find_word2(0 To 2, 0 To (jj_find * ii_find))  '
        jjj = 1
       For i = 1 To ii_find
         For j = 1 To jj_find
           If ((Find_word(i, j) <> "") And (Find_word(i, j) <> " ") And (Find_word(i, j) <> Empty) And (Len(Find_word(i, j)) > 2)) Then
              Find_word2(0, jjj) = Find_word(i, 0)
              Find_word2(1, jjj) = Find_word(i, j)
              jjj = jjj + 1
           End If
         Next j
       Next i
      
        'раскладываем по словам  диапазон в котором ищем
        ii_text = myWord(Rng_text).imyRows
        jj_text = myWord(Rng_text).imyColumns
        ReDim text_word1(1 To ii_text, 0 To jj_text) ' 0-вой столбец фраза целиком
        text_word1 = myWord(Rng_text).iFindword
    '______________
    
    'определение % совпадения каждого слова в строке в масиве  text_word2(i, j)
    kkj = jj_text + jjj + 2
    kki = ii_text + 2
    ReDim text_word2(0 To kki, 0 To kkj)
    On Error Resume Next
    If Err.Number <> 0 Then
    Err.Clear
    End If
    
    
       '-составляем массив в котором будем сопоставлять
    
        For j = 0 To jj_text
             i2 = 3
            For i = 1 To (ii_text) 'заполнение массива
             
             text_word2(0, j) = "где ищем"
             
             text_word2(i2, j) = text_word1(i, j)
             i2 = i2 + 1
            Next i
          Next j
    ' первая строка - группы- искомые слова исходном виде- строка 0
    ' вторая строка - группы- искомые слова в разложенном виде - строка 1
       For i = 1 To 2 'заполнение массива
         kkk = jj_text + 1
          For jj = 1 To jjj
              text_word2(0, kkk) = "что ищем"
              text_word2(i, kkk) = Find_word2((i - 1), jj)
              kkk = kkk + 1
             Next jj
     
        Next i
      
      For i = 3 To i2 - 1 'получаем % совпадения искомых слов
      
           For jj = (jj_text + 1) To kkk
           eqmax = 0
             For jj3 = 1 To jj_text
              If text_word2(i, jj3) <> Empty Then
                 If Equality(CStr(text_word2(i, jj3)), CStr(text_word2(2, jj))) > eqmax Then
                    text_word2(i, jj) = CDbl(CDbl(Equality(CStr(text_word2(i, jj3)), CStr(text_word2(2, jj))) / Len(CStr(text_word2(2, jj)))))
                    
                    eqmax = Equality(CStr(text_word2(i, jj3)), (CStr(text_word2(2, jj))))
                 End If
                  If eqmax < 3 Then text_word2(i, jj) = ""
              End If
             Next jj3
            Next jj
         Next i
     
        
     
      ElseIf myWord(Rng_text).imyRows < myWord(Rng_text).imyColumns Then 'если столбцов больше чем строк в тексте в котором ищем
      
      Else
      
      
      End If
      
      
      'динамический расчёт вставляемого массива от заданной ячейки полбзователем
     
     txt_p = Substring(RefEdit4.Text, "!", 1)
     txt_col = Substring(Substring(RefEdit4.Text, "!", 2), "$", 2)
     txt2 = Substring(Substring(RefEdit4.Text, "!", 2), "$", 3)
     txt_row = Substring(txt2, ":", 1)
    
     i = jj_text + jjj + 2 + Int(Columns(txt_col).Column)
     
     txt_out = txt_col & txt_row & ":" & Trim(Substring(Cells(1, i).Address, "$", 2)) & Trim(Str((ii_text + 2) + Int(txt_row)))
    
    'вставка итогового массива
          ActiveWorkbook.ActiveSheet.Range(txt_out).Clear
           Set theRange_out = ActiveWorkbook.ActiveSheet.Range(txt_out)
             theRange_out = text_word2
          
               
          End If
        End If
      End If
    

          

    ВОПРОС БЫЛ КАК ОБОЙТИ Redim ? ИЛИ КАК ОТЛОВИТЬ ОШИБКУ «RunTime Error 7 — Out of Memory «…

    ТУТ ГЛЮК САМОГО VBA EXCEL В Redim на больших объёмах….

    ПОМОГИТЕ ПОЖАЛУЙСТА.
    ЗАРАНЕЕ СПАСИБО.

    Многие пользователи ПК во время работы с какой-либо программой могут столкнуться с «вылетом» указанной программы, и появившимся сообщением «Out of memory». Возникшая проблема может иметь множество причин, начиная от банального недостатка памяти на пользовательском ПК, и заканчивая некорректной работой с памятью какой-либо программы.

    • Причины появления дисфункции
    • Как исправить ошибку «Out of memory»
    • Заключение

    Ошибка out of memory

    Причины появления дисфункции

    Сообщение «Out of memory» (в переводе дословно «вне памяти», или «недостаточно памяти») обычно возникает при недостатке памяти на пользовательском компьютере. В частности же, в появлении данной ошибки «виновен» следующий набор факторов:

    • Недостаток памяти RAM на вашем ПК (рабочей памяти, планки которой установлены на материнской плате вашего компьютера). Если на вашем компьютере установлен всего 1 гигабайт памяти, вы будете встречаться с описываемой ошибкой довольно часто. Нормальным же ныне считается наличие на компьютере 4 гигабайт памяти и выше;
    • Недостаток места на жёстком диске.

    Когда вашему компьютеру не хватает физической R.A.M. памяти, он заимствует часть места на жёстком диске, и создаёт так называемую «виртуальную память». Система временно хранит в такой виртуальной памяти ту часть данных, которая не помещается в памяти обычной. Такие данные обычно хранятся в файле «pagefile.sys», размер которого может увеличиваться или уменьшаться в зависимости от специфики работы вашей ОС. Если на диске будет недостаточно места, файл «pagefile.sys» не сможет расти, и пользователь получит рассматриваемую ошибку.

    • При одновременном запуске на ПК большого количества программ, каждая из которых бронирует часть памяти ПК под свои задачи;
    • При запуск большого количества вкладок браузера. Веб-навигаторы уровня «Firefox» или «Google Chrome» способны занимать от 500 мегабайт до 1 гигабайта памяти под свой функционал, при этом число открытых вкладок и соответствующей обслуживающей памяти может быть ограничено системой. Специалисты Майрософт называют такую проблему «the desktop heap limitation» — «ограничение кучи рабочего стола»);
    • Некорректная работа с памятью ряда программ (наиболее часто это игровые программы);
    • Не оптимальный размер файла подкачки, с которым работает система.Планка памяти и датчик

    Как исправить ошибку «Out of memory»

    Для решения указанной проблемы рекомендую сделать следующее:

    1. Перезагрузите ваш ПК, и запустите требуемую программу вновь. Возможно, что проблема имеет случайный характер, и более повторяться не будет;
    2. Перед запуском нужной программы закройте другие ненужные программы (браузер, музыкальный или видео плеер, текстовый или графический редактор, мессенджер и так далее);
    3. Если проблема возникает во время серфинга в сети, закройте всё множество вкладок вашего браузера (при наличии), оставив лишь одну или две.Много открытых вкладок

    Альтернативным вариантом решения проблемы является установка соответствующего фикса от Майкрософт. Или использование расширений или дополнений для браузера уровня «The Great Suspender» для «Google Chrome», хорошо работающего с ненужными вкладками браузера.

    • Добавьте оперативной памяти на ваш ПК. Если у вас на компьютере установлено 1-2 гигабайта памяти, будет оптимальным довести её объём до 4 гигабайт (а для 64-битных Виндовс 7, 8 и 10 версии рекомендую 8 и более гигабайт);Планка памяти
    • Убедитесь, что на вашем жёстком диске (или SSD) достаточно свободного места. При необходимости, освободите диск от ненужных файлов;
    • Используйте инструмент командной строки BCDEdit для изменения параметров загрузки системы. Если у вас на ПК установлена Виндовс 7 и более, запустите командную строку от имени администратора на Виндовс 7 и Виндовс 10, и в ней наберите:

    bcdedit/set IncreaseUserVa 3072

    И нажмите на ввод, и перезагрузите ваш ПК. Функционал данной команды позволяет выделить пользовательским приложениям 3 гигабайта оперативной памяти для работы. В некоторых системах этого может быть слишком много, потому если после ввода данной команды система начала чаще сбоить, то введите в командной строке от имени администратора:

    bcdedit /set IncreaseUserVa 2560 что позволит задействовать 2,5 гигабайта вместо ранее забронированных 3.

    Если ситуацию этим исправить не удалось, верните настройки на состояние по умолчанию:

    bcdedit /deletevalue IncreaseUserVa

    • Увеличьте объём файла подкачки. Нажмите кнопку «Пуск», в строке поиска введите sysdm.cpl и нажмите ввод. В открывшемся окне настроек системы выберите «Дополнительно» — «Быстродействие» — «Параметры» — «Дополнительно» — «Виртуальная память» — «Изменить». Снимите галочку с опции автоматического размера, поставьте галочку на «Указать размер», и поставьте исходный размер в 8192, и максимальный в 8192. Затем выберите «Задать»;

      Окно виртуальной памяти

      Установите нужный размер файла подкачки

    • Если ошибка возникает при использовании игровой программы, перейдите в её графические настройки, и выберите их минимальные значения;
    • Произведите правильную настройку «Java». Для решения проблем с игровой программой «Майнкрафт» перейдите в Панель управления Виндовс, найдите там «Java» и запустите данную среду исполнения. Нажмите на кнопку «View», затем дважды кликните на «Runtime Parametres». Введите туда –Xms256m – Xmx3072m (или больше). Xms – это минимальное выделение ОЗУ, Xmx – максимальное. Значение Xmx рекомендуют устанавливать на процентов 70-80% от общего объёма ОЗУ. Примените изменения, и перезагрузите ваш ПК.

    Заключение

    Ошибка «Out of memory» может иметь множество причин, связанных как с физическим недостатком памяти на ПК, так и другими детерминантами, изложенными мной выше. Для решения проблемы советую закрыть ненужные программы (вкладки браузера) на вашем компьютере (тем самым разгрузив его память), а самым эффективным инструментом является установка дополнительной планки памяти на ПК, что в большинстве случаев поможет избавиться от ошибки на вашем компьютере.

    The Runtime error 7 is caused by a conflict inside Visual Basic encoded programs. If you try to open the BoundText property of a Data Combo in Visual Basic code after you scroll down the list of elements in its list portion until the currently selected element is no longer listed, the following error message may be displayed:

    Runtime Error “7”: Out of Memory

    Although the error message has appeared, you may find that there is no actual loss of memory and the system behaves consistently. To fix this error, you should follow the steps below:

    What Causes Runtime Error 7?

    Runtime Error 7 normally shows in this format:

    Runtime Error “7”: Out of Memory

    The error message above is caused by the FM20.dll file being corrupted or damaged. The FM20.dll file is used by Visual Basic to help encode various features and settings inside the programs you create. This file is only used within Visual Basic, and the reason why it shows errors is thanks to the way it is not supported by Visual Studio or other programming interfaces on your system. Fortunately, you can fix the Runtime Error 7 by removing the FM20.dll file from  your application and then unregistering the comctl32.ocx file on your PC. Here’s what you should do…

    How To Fix Runtime Error 7

    Step 1 – Remove the FM20.dll file From Your Application

    If you have coded a program using Visual Basic to use the FM20.dll (Dynamic Link Library) file then you should remove it, the reason being is that it might cause some conflictions. A DLL file is a file that contains different functions, which are mostly used across multiple applications and sometimes these can brake causing one of the applications to show error messages. To remove DLL files here’s what to do:

    1. Open the Command Prompt.

    • Click Start > Run.
    • Type ‘cmd‘ in the box (without the quotation marks).
    • Click OK.

    2. Navigate to the exact location of the DLL.

    • Type ‘regsvr32 /u fm20.dll‘ (again without quotations).
    • Press Enter.
    • Once you press enter a confirmation box will appear acknowloging that the process was successful.

    Step 2 – Unregister And Delete “Comctl32.ocx” File

    Comctl32.ocx is an essential file used by Windows to control various Visual Basic components on your PC. Unfortunately, this file often becomes damaged, leading Windows to show the Runtime 7 error. The most effective way to ensure this does not cause any errors, is to delete the file and re-register it on your PC. Here’s what to do:

    1. Open the command prompt

    • Click Start > Run
    • Type the following command without quotations: ‘regsvr32 -u comctl32.ocx
    • If you get a message saying ‘DLL is not registered’ press OK.

    2.  Search Files

    • Click Start > then click Search.
    • Click All files and folders.
    • Type Comctl32.ocx in the All or part of the file name box.
    • Select Local Hard Drives from the Look in drop down list.
    • Click Search. Results will show in right hand pane.
    • Make a note of the folder in which the Comctl32.ocx is i > right click the Comctl32.ocx file and delete it

    Step 3 – Manually Replace The Comctl32.ocx File

    It’s often the case that Comctl32.ocx will either be corrupted, damaged or just not have the necessary permissions for use on your system. If this is the case, then manually replacing the file could fix the error for you. Here’s what you need to do:

    1) Download Comctl32.zip from our server

    2) Unzip the Comctl32.ocx file onto your computer’s hard drive

    3) Browse to c:WindowsSystem32

    4) Locate the current Comctl32.ocx on your system

    5) Rename the current Comctl32.ocx to Comctl32BACKUP.ocx

    6) Copy & paste the new Comctl32.ocx into C:WindowsSystem32

    7) Click Start > Run (Or search”run” on Vista & Win7)

    8 ) Type “cmd” in the box that appears

    9) Type “regsvr32 Comctl32.ocx” on the black screen

    10) Press enter

    11) Reboot your PC

    Step 4 Clean Out Viruses

    • Download This Virus Scanner

    Antivirus programs are software tools which scan through your PC and remove any of the viruses or malware infections that are on your system. It’s often the case that viruses will infect various DLL files on your computer and then cause them to be unreadable to your PC. To ensure this is not happening on your computer, you should try using an antivirus program to scan through your system and remove any of the infections that cause all these errors. You can download our recommended antivirus program from the link above, but there are a large variety of programs available.

    Step 5 – Clean Out The Registry

    • Download This Registry Cleaner

    Another big cause of the Runtime Error 7 errors is the registry database of Windows. The “registry” is a central database which stores all the settings, information and options for your computer, and is where Windows keeps many vital settings that it requires to run. It’s often the case that a lot of registry settings become damaged and corrupted, leading your PC to take longer to run, making it run slower and with a lot of errors. To fix this problem, you should use a ‘registry cleaner’ to scan through your PC and fix any of the damaged or corrupt settings that are inside it. You can see our recommended registry cleaner below:

    SvetaS

    0 / 0 / 0

    Регистрация: 16.07.2015

    Сообщений: 2

    1

    16.07.2015, 20:47. Показов 6535. Ответов 4

    Метки нет (Все метки)


    Добрый день!

    Проблема в следующем: все данные с листа помещаю в массив, чтобы их быстрее обработать. На малых объемах все работает хорошо. На больших, близких к граничным, вылезает ошибка «RunTime Error 7 — Out of Memory».

    Она вылезает или на ReDim массива, или на присвоении массиву диапазона с листа.

    ПАМЯТИ 8 ГБ, Excel 64 РАЗРЯДНЫЙ, ОПЕРАЦИОНКА 64 РАЗРЯДНАЯ,Excel 2016
    ошибку даёт Redim на 111 533 строках и 1635 столбцах
    Код

    Visual Basic
    1
    2
    3
    
    Dim text_word2() As Variant
    x=1635
     ReDim text_word2(0 To kki, 0 To x)

    ВАРИАНТЫ ИСПРОБОВАННЫЕ:
    http://www.planetaexcel.ru/for… -of-memory

    ПОМОГИТЕ ПОЖАЛУЙСТА.
    ЗАРАНЕЕ СПАСИБО.

    __________________
    Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



    0



    1331 / 304 / 72

    Регистрация: 13.11.2008

    Сообщений: 632

    16.07.2015, 21:12

    2

    Я выходил из такой ситуации следующим образом:
    вычислял общее кол-во строк
    определял кол-во проходов по массиву так, чтобы за один проход в массив загонялось не более 2000 строк(при условии 30 с лишним столбцов)
    и так кусками обрабатывал.

    Но у меня была ситуация такова, что мне надо было собрать результирующий массив с условиями, в результате чего результирующий массив был в разы меньше исходных данных. Память выдерживала без проблем и на 64 и на 32 битах.



    0



    Эксперт WindowsАвтор FAQ

    17955 / 7592 / 889

    Регистрация: 25.12.2011

    Сообщений: 11,323

    Записей в блоге: 17

    22.07.2015, 14:20

    3

    Ну, самый очевидный способ оптимизации это ввести явную типизацию вместо Variant:

    Цитата
    Сообщение от SvetaS
    Посмотреть сообщение

    Dim text_word2() As Variant

    Возможно дальше по коду у Вас идет присвоение массиву ячеек как объектов (а не значений) от чего и происходит перегруз (если только Вы не используете массив как раз именно с целью доступа к свойствам виртуальных ячеек).

    Уверен, что если поискать по остальной части проекта, то можно аналогично оптимизировать.
    В любом случае без всего кода тяжело что либо подсказать.
    Утечка памяти может происходить где угодно.
    Приведенный участок кода всего лишь информирует о том, что памяти больше нет.
    Но он далеко не обязательно является основной причиной проблемы.



    0



    15131 / 6405 / 1730

    Регистрация: 24.09.2011

    Сообщений: 9,999

    22.07.2015, 14:26

    4

    Dragokas, ТС продолжила обсуждение в упомянутой теме на Планете. Толку правда 0.



    0



    Dragokas

    22.07.2015, 14:28


        RunTime Error 7 — Out of Memory

    Не по теме:

    Не думаю, что у меня будет время прибыть на Планету )), я и здесь редко бываю…



    0



    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Runtime error 339 component comdlg32 ocx как исправить
  • Runtime error 226
  • Runtime error 6025 pure virtual function call
  • Runtime error 3221226356
  • Runtime error 217 at 511df330 при запуске приложения directum

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии