Excel error out of memory

 

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

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

Сообщений: 3631
Регистрация: 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 — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 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 — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

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

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

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

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 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))

 

Юрий М

Модератор

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

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

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

 

The_Prist

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

Сообщений: 14181
Регистрация: 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 — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 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

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

 

Юрий М

Модератор

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

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

#19

01.02.2013 19:44:42

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

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

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 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 берет, на втором — ошибка

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 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

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

Сообщений: 14181
Регистрация: 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)

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

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

При выполнении макроса или просто работы с большим объемом данных в Exel — вылетает ошибка «Недостаточно памяти» (или «Недостаточно ресурсов», «Out of Memory»). Первым делом мы начинаем смотреть в диспетчере задач, сколько у нас используется памяти. Странно, мы видим, что свободной оперативной памяти предостаточно. Excel съедает не так уж и много памяти. Но почему же вылетает такая ошибка?

Давайте сначала разберемся в памяти. Тогда нам станет почему она заканчивается.

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

Приложения, в том числе Excel, оперирует виртуальной памятью. Что же такое виртуальная память?

Виртуальная память — это объем памяти доступный приложению.

Непонятно? Давайте рассмотрим простой пример.

Возьмем первоклассника в первой четверти. В школьной программе дети изучают счет до десяти. Виртуальная память равна 10. Дети учатся решать примеры и задачи, используя числа до 10. Ребенок с легкостью может решить примеры:  2+5=7,   9-4=5. Но задача 9+4=? становится для него непосильной, потому что переполняется объем виртуальной памяти.

Во второй четверти первоклассники изучают счет до двадцати. Виртуальная память увеличивается с 10 до 20. Наш ребенок может с легкостью решить пример 9+4=13, который в первой четверти вызывал у него затруднения.

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

Давайте вернемся к нашему Excel-ю. Теперь мы понимаем, что когда Excel говорит, что у него заканчивается виртуальная память, он сообщает, что заканчивается его внутренняя память. О реальной физической оперативной памяти, Excel знает ровно столько, сколько знает (а точнее не знает) наше самосознание о нашем мозге. Вы можете запускать приложение Excel и открывать файлы, как на мощных компьютерах, так и на стареньких слабеньких компьютерах. Правда работать все будет с разной производительностью. Поэтому заглядывать в диспетчер задач, в данном случае не имеет особого смысла.

Объем виртуальной памяти Excel по данным MSDN

Для 64-разрядной версии Excel 2010 не действует ограничение в 2 Gb
Microsoft Excel 2007 2Gb
Microsoft Excel 2003 1Gb
Microsoft Excel 2002 128Mb
Microsoft Excel 2000 64Mb

Почему же происходит переполнение виртуальной памяти?

Следует помнить, когда мы запускаем Excel, мы уже занимаем определенный объем виртуальной памяти. Под открытие файлов, надстроек, библиотек нам остается меньше максимально доступного объема памяти.

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

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

tmpDim = Empty                'Опустошаем переменную
Erase tmpArr                  'Стираем массив
Set tmpObject = Nothing       'Стираем объект

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

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

Memory issues are very common while dealing with the Microsoft Excel application. No matter what MS Excel version you are using memory errors is not bounded to any specific versions.

There are different types of Excel memory error occurs that prevent the user to execute a specific action.

In this blog, we will discuss those Excel not enough memory errors and try different solutions to get rid of them.

But before going to troubleshoot Excel out of memory error, it is recommended to find out the root cause of this error. As this will help you to prevent any type of Excel there isn’t enough memory to complete this action error from letting happened in the future again.

Why Does Excel Say I Don’t Have Enough Memory?

Following are the causes of Excel Not Enough Memory error :

1. Copying Formulas to Large Area 

It’s obvious to encounter Excel insufficient memory error if you are trying to copy the formula to large area of your worksheet. Excel 32 bit versions have a limit of 2 GB thus working with a large worksheet section leads to generate this error.

2. Formula Re-Calculations

Such a type of memory error also arises due to the recalculation of formulas mainly when you insert any columns/rows, copy-paste, or while performing any calculations.

Suppose, your excel workbook contains thousands of formulas on the sheet and you have just added one more column into it. In that case, Excel has to recalculate the entire formula of your worksheet for adjusting this newly added column.

All in all Excel out of resource error also depends on the complexity of your spreadsheet such as what formulas are involved in it or how your spreadsheet is built.

3. Other Problem Causing Elements Of The Spreadsheet

Even though your PC is having enough space in the local memory but you get there isn’t enough memory to complete this action excel error due to the presence of complex pivot tables, macros, complex charts in the workbook.

4. Other Heavy Applications Are Holding Up The Memory Space

 Another reason can be the execution of heavy-size applications on your PC that has already captured a huge amount of your PC’s memory space. Thus excel is not getting enough memory to work with.

Now, coming to the point, let’s start solving different memory errors one by one:

How To Fix There Isn’t Enough Memory To Complete This Action Excel Error?

Method 1# Fix Corrupt Excel File

Sometimes such an error also arises due to Excel file corruption. So in that case always look for reliable tools like Excel repair tool.

  • This tool is very much efficient to resolve any type of corruption, error, and issues that occurred in your Excel workbook.
  • With this unique tool, you can repair multiple Excel files in just one go and easily recovers entire data in your desired location.
  • It is very easy to use and quite compatible with both Windows as well as Mac OS.
  • Well, support for Excel entire versions.
  • Before making the purchase you can try the demo version of this tool, it’s free of cost.

* Free version of the product only previews recoverable data.

Method 2# Lack of PC Memory

It is seen that many cheaper PCs are having only 1 to 2 GB of memory space. Well, it’s enough for browsing the internet and many more tasks but not fits under these circumstances.

  • If you are using Windows 7 or XP 32 bit version PC then you need to use the 4GB memory space.
  • Users of Windows 7 or Windows 10 64 bit version need to buy extra memory.

After launching Microsoft Excel 2016, Microsoft is pressurizing the users to install 64-bit Office in order to skip the running out of memory and resource issues. In their previous version of Excel, Microsoft suggested 32-bit because some of the controls and add-ins were not yet present in the 64-bit compatible versions. If you are dealing with a lot of macros then it is recommended to test it first before migrating to 64-bit Excel.

Method 3# Separate Excel File Into Different Workbooks

Split the large size Excel file into separate workbooks as this will avoid the complexity of handling Excel large files.

By implementing this trick you can easily avoid the restriction of using 2GB memory space on Excel files.

Here are the steps which you need to follow:

  • Select the sheet from your workbook sheets tab. Make a right-click over the sheet and then from the menu choose the “Move or Copy”

move excel file 1

  • By pressing the “Ctrl” key you can select several other non-adjacent sheets.

2) From the opened window of “Move or Copy“, choose the “(new book)” option which is present under the list of “To book”. Also, choose the option of “Create a copy” and then click the “OK” button.

move excel file 2

3) Your chosen worksheets are now shifted to a fresh new workbook. Hit the “File” tab and choose the “Save” option to save new excel.

Method 4# Switch To Manual Calculation Method

To solve Excel out of memory error you need to stop the Excel application for recalculating the complete data after any changes.

To set manual calculation to your Excel workbook, you need to follow down these steps:

1) Go to the “File” tab from the Excel ribbon

2) From the list of appearing menus choose the “Options”.

Restore from File Recover

3) This will open the Excel Options window; here you have to choose the “Formulas” tab from the left pane.

Set the Calculation Method to Manual 1

4) Hit the Manual option which is present under the section of the calculation option. Here you will see an option “Recalculate workbook before saving” if you keep this option enabled then each time before saving the workbook, complete data is recalculated.

Set the Calculation Method to Manual 2

Besides this, you can also approach the faster method of worksheet’s manual recalculation.

1) Follow this path: Formulas >Calculations Options> Manual

Set the Calculation Method to Manual 4

3) You can also press the “Calculate Sheet” options present in the Calculation section. Or just free the “Shift” and “F9” key together from your keyboard. This will perform a quick calculation over the data of your current worksheet.

set manual calculation method 5

Different Types Of Excel Memory Error Alongwith Their Fixes:

Error 1# Getting “Not Enough Memory” Error Messages While Trying To Copy Formulas Over Large Area In Excel

You will receive “Not Enough Memory” Error messages when you try to fill or copy formulas into a large area of a worksheet. This error message may also appear when you try to add formulas to a large worksheet. In both instances, you will receive the same error message saying that:

Not enough memory.

Not enough system resources to display completely.

Why This Error Is Triggering?

As we already discussed that each of the Microsoft Excel versions such as Microsoft Excel 2007, Excel 2010, and Excel 2013 32-bit is set to 2 GB of memory which is also called the internal heap space. Along with the memory, each of the instances is also set to the 32,760 source cells to do a smart fill operation. When you try to copy the large sections of a worksheet, then due to these limitations you will get the memory error.

How To Solve This Error?

In order to solve this issue, follow the given steps carefully:

Step 1: Try to fill only the part of the range that you want to fill.

Step 2: Choose only the end row or last two rows of the filled choice, and then paste beyond down the sheet.

Step 3: Now, you have to do again step 2 until you have filled the complete range that you want to fill.

In order to get rid of the memory limit, you should split your tasks into smaller workbooks, and try to open them in different instances of Microsoft Excel.

Error 2# Microsoft OFFICE 2016- There Isn’t Enough Memory To Complete This Action

This issue generally appears while trying to erase one single row in an Excel sheet. It throws an error message: there isn’t enough memory to complete this action Excel and after that, the application freezes up.

The cause behind this issue is not clear, but you can solve this issue with ease. Follow the below-given steps one by one to get rid of this problem:

  • First of all, confirm that all of your system drivers are updated. Also, update the Microsoft Office. To do this go through the, File> Account> Office Update> Update Now.

Update Excel On Mac

  • After it, you need to unmark ‘Disable hardware graphics acceleration’ by going through File>Option>Advanced>Display.

disable hardware graphics acceleration 4

Now, check that the issue is gone or not.

Error 3# Microsoft Excel Cannot Open or Save Any More Documents Because there is Not Enough Available Memory or Disk Space

This error message is very irritating, as your computer or laptop have enough disk space in C or D drive and memory but Excel shows you don’t have enough memory available.

Generally, this error message appears on Excel files that contain complicated formulas, calculations, or external resources.

That’s why; the security settings in Microsoft Excel will stop opening these files and shows this irrelevant error message.

It is clear that this issue is related to the built-in security settings of Excel 2013 or 2016. Follow the given steps to get rid of this issue:

Step 1: First, you have to create a new Excel file and then navigate to the Options from File Menu.

Restore from File Recover

Step 2: Click on the Trust Center Settings and under the Trust Center settings, uncheck all checkboxes in Protected.

Fix Macro Has Been Disabled Security Warning In Excel 2

uncheck-protected-view-settings

Through this, you will help the Excel file to open without any security errors like “Microsoft Excel cannot open or save any more documents because there is not enough available memory or disk space”.

Once you press the OK and applied the settings then try to open the same Excel file which is showing the error.

Error 4# Unable To Open The Attachments In Excel Because Of The “There Isn’t Enough Memory Or Disk Space” Error

In order to get rid of this error and allow more memory, you have to exit from the workbooks or close the application that you don’t need. In order to free disk space, erase files that you don’t need.

If this issue is occurring with a particular file then it is sure that it is a file-specific issue.

  • So, first, you have to find out the file format of the attached file. Try to save the file locally on your computer and then try to open the file.
  • Right-click on the locally saved file and go to its Properties and unmark the Block option and then again try to open the file.

In case you are still unable to open the file in Microsoft Excel then you have to open the file in CSV file format. To do this, go to the save as option and save the file as a CSV format. After it, try to open the file and check for the issue.

Error 5# “Excel Has Ran Out Of Resources” Whilst Working On Microsoft Excel

This issue generally appears on 32 bit Excel, but sometimes also affects the 64 bit Excel.

To fix this issue you have to set your paging file size to automatic, follow the below-given steps:

  • Navigate through the “Start-> Control Panel->Advanced System Settings.

advanced-system-settings

  • After that hit the Advanced->Performance> Settings->Advanced->Virtual Memory-> Change. Now, you have to mark the box for Automatically manage paging file size for all drives.

advanced-system-settings 2

advanced-system-settings 3

  • At last, click on the OK buttons to close all Windows.

Conclusion

After applying the above-given solutions your problem of Excel not enough memory error will easily get resolved. All the given solutions are very simple to apply so you don’t have to call any professional or invest a single penny for it.

But, if you are encountering any other Excel memory error apart from the errors I have listed above. In that case, share your problems with us by commenting on this blog.

Priyanka is an entrepreneur & content marketing expert. She writes tech blogs and has expertise in MS Office, Excel, and other tech subjects. Her distinctive art of presenting tech information in the easy-to-understand language is very impressive. When not writing, she loves unplanned travels.

Return to VBA Code Examples

In this Article

  • Causes of Out of Memory Error
  • Preventing an Out Of Memory Error
    • Release Objects
    • Make Sure Only one Instance of Excel is Running
    • Check the Size of your Excel file
    • Other ways to Check Memory

This tutorial will explain the VBA Out of Memory Error.

The VBA Out of Memory error occurs when Excel has used all the resources of your machine while running a macro and literally runs out of memory to carry on calculating or running code. This could occur when you have a lot of applications running and try to run a large macro in Excel, or perhaps when you have created a perpetual loop in Excel in error.

(See our Error Handling Guide for more information about VBA Errors)

Causes of Out of Memory Error

An out of memory error can occur if one is working with a workbook that contains many worksheets and thousands of rows. If we create a loop that works with a great volume of data, an out of memory error could occur. It could also occur if we are working with multiple objects and set each object with a SET statement, but then do not clear the references to the objects between procedures or loops.

For example, the following loop could definitely cause a memory error if you have multiple files open with multiple sheets.

Sub TestMemory()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim i As Single
  For Each wb In Application.Workbooks
    For Each ws In wb.Sheets
      Do Until ActiveCell = "A1048576"
        ActiveCell = 1 + i
        i = i + 1
        ActiveCell.Offset(1, 0).Select
    Loop
  Next ws
 Next wb
End Sub

VBA OutOfMemory Error

Preventing an Out Of Memory Error

Release Objects

If we are working with Loops and Objects, we need to make sure that we set the Object to NOTHING once it has been used and it no longer needed – this will release memory.

VBA OutOfMemory ClearObjectVariable

Make Sure Only one Instance of Excel is Running

If we are working with large files and vast amounts of data, check that you do not have multiple sessions of Excel open – it needs to just be open once.  A way to check this is to go to the Task Manager and see how many instances of Excel are running.

Press Ctl+Alt+Delete on the Keyboard,

Click on Task Manager and make sure that there is only one instance of Excel running.  In the graphic below, there is one instance, with 2 windows.

VBA OutOfMemory TaskManager

We can also check in the Task Manager that there are no instance of Excel running in the background (ie not visible).

Scroll down in the Task Manager until you see Background Processes and make sure Excel is not in that list of programs.

VBA OutOfMemory BackgroundProcesses

Check the Size of your Excel file

Often there are rows and columns that have been accessed below the ones in your worksheets that are actually used.  Excel uses memory in these cells – even if those cells are empty.  Check the size of the file by pressing CTRL+SHIFT+END on the keyboard to see where your cell pointer lands.  If it lands well below the last cell that you are using, make sure you delete all the empty rows and columns above the cell pointer and then re-save the file – this will reduce the size of your Excel file.

Other ways to Check Memory

There are various other ways to free memory in Excel.  A good idea is to close Excel if you are not using it, and then open it later – this will free up any memory that Excel is storing as it tends to store memory even when a workbook is not open!  Always make sure your version of Office is up to date by checking for Updates on your PC and check for any VBA add-ins that may be being used, but that you are not using – you can uninstall these to free up even more memory.

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

В этом руководстве объясняется ошибка нехватки памяти VBA.

Ошибка VBA Out of Memory возникает, когда Excel использовал все ресурсы вашего компьютера при выполнении макроса и буквально исчерпывает память для продолжения вычислений или выполнения кода. Это могло произойти, когда у вас запущено много приложений и вы пытаетесь запустить большой макрос в Excel, или, возможно, когда вы создали вечный цикл в Excel по ошибке.

(Дополнительную информацию об ошибках VBA см. В нашем Руководстве по обработке ошибок)

Причины ошибки нехватки памяти

Ошибка нехватки памяти может возникнуть, если вы работаете с книгой, содержащей много листов и тысячи строк. Если мы создадим цикл, который работает с большим объемом данных, может возникнуть ошибка нехватки памяти. Это также может произойти, если мы работаем с несколькими объектами и устанавливаем каждый объект с помощью оператора SET, но затем не очищаем ссылки на объекты между процедурами или циклами.

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

1234567891011121314 Sub TestMemory ()Dim wb As WorkbookDim ws как рабочий листТусклый я как одиночныйДля каждого ББ в Application.WorkbooksДля каждого WS в wb.SheetsСделать до ActiveCell = «A1048576″ActiveCell = 1 + яя = я + 1ActiveCell.Offset (1, 0) .SelectПетляСледующий wsСледующий wbКонец подписки

Предотвращение ошибки нехватки памяти

Объекты выпуска

Если мы работаем с циклами и объектами, нам нужно убедиться, что мы установили для объекта значение НИЧЕГО после того, как он был использован и больше не нужен — это освободит память.

Программирование на VBA | Генератор кода действительно работает для вас!

Убедитесь, что запущен только один экземпляр Excel

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

Нажмите Ctrl + Alt + Delete на клавиатуре,

Нажмите на Диспетчер задач и убедитесь, что работает только один экземпляр Excel. На рисунке ниже показан один экземпляр с двумя окнами.

Мы также можем проверить в диспетчере задач, что нет экземпляров Excel, работающих в фоновом режиме (т.е. невидимых).

Прокрутите вниз в диспетчере задач, пока не увидите Фоновые процессы и убедитесь, что Excel нет в этом списке программ.

Проверьте размер вашего файла Excel

Часто строки и столбцы, к которым был получен доступ, располагаются ниже тех, которые используются на ваших листах. Excel использует память в этих ячейках, даже если эти ячейки пусты. Проверьте размер файла, нажав CTRL + SHIFT + END на клавиатуре, чтобы увидеть, где находится указатель вашей ячейки. Если он приземляется значительно ниже последней используемой ячейки, убедитесь, что вы удалили все пустые строки и столбцы над указателем ячейки, а затем повторно сохраните файл — это уменьшит размер вашего файла Excel.

Другие способы проверки памяти

Есть несколько других способов освободить память в Excel. Хорошая идея — закрыть Excel, если вы его не используете, а затем открыть его позже — это освободит всю память, которую хранит Excel, поскольку он имеет тенденцию хранить память, даже когда книга не открыта! Всегда проверяйте актуальность вашей версии Office, проверяя наличие обновлений на вашем компьютере и проверяя любые надстройки VBA, которые могут использоваться, но которые вы не используете — вы можете удалить их, чтобы освободить еще больше памяти.

Вы поможете развитию сайта, поделившись страницей с друзьями

Понравилась статья? Поделить с друзьями:
  • Excel equations in word
  • Excel equal cells not equal
  • Excel epm что это
  • Excel docs in google doc
  • Excel enter в строке формул