axtrace Пользователь Сообщений: 23 |
Добрый день! Проблема в следующем: все данные с листа помещаю в массив, чтобы их быстрее обработать. На малых объемах все работает хорошо. На больших, близких к граничным, вылезает ошибка «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 весит много, поэтому через гугл драйв. Подскажите, пожалуйста, в чем может быть дело и как бороться. Спасибо Изменено: axtrace — 01.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 |
#3 01.02.2013 18:56:43 Возможно, дело и не в объёме памяти, требуемой для массива,
А в коде написано 150 000 PS: Через Redim можно изменять только верхнюю размерность массива Изменено: EducatedFool — 01.02.2013 19:01:17 |
||
axtrace Пользователь Сообщений: 23 |
#4 01.02.2013 19:00:51
а что такое верхняя размерность массива?
нет, не заработает. я ее специально добавил, чтобы показать, что если указывать размеры как числа, то все ок. |
||||
ikki Пользователь Сообщений: 9709 |
#5 01.02.2013 19:04:27
поправка. фрилансер Excel, VBA — контакты в профиле |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#6 01.02.2013 19:05:55
А Вы попробуйте присвоить LastRow значение = 1048574. И LastColumn = 15. Первую строку с ReDim Отключите. Что получится? |
||
ikki Пользователь Сообщений: 9709 |
#7 01.02.2013 19:14:52 имхо, 48мб качать никто не будет. кстати, размеры массива вообще нет нужды определять явно.
фрилансер Excel, VBA — контакты в профиле |
||
axtrace Пользователь Сообщений: 23 |
#8 01.02.2013 19:17:50
Получилось, что при первом вызове функции getArrayFromSheet — той, в которой этот ReDim содержиться — проходит все успешно, но во втором вызове — я несколько массивов формирую с разных листов — опять вылетает та же ошибка. Хотя там точно также присваивается LastRow значение = 1048574. И LastColumn = 15 |
||
Михаил С. Пользователь Сообщений: 10514 |
#9 01.02.2013 19:20:09
Известно — число столбцов на листе Прикрепленные файлы
|
||
ikki Пользователь Сообщений: 9709 |
#10 01.02.2013 19:21:51
нет. фрилансер Excel, VBA — контакты в профиле |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Утечка памяти? Попробуйте убить массив. |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#12 01.02.2013 19:24:24
Михаил, не совсем так: это последняя ячейка (номер столбца) по второй строке. |
||
axtrace Пользователь Сообщений: 23 |
#13 01.02.2013 19:24:53
может быть. а как убивают массивы? nArray = tSheet.Range(tSheet.Cells(1, 1), tSheet.Cells(LastRow, LastCol)) |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Вы сначала объясните — зачем дважды ReDim с одним и тем же nArray? |
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#15 01.02.2013 19:37:27 Попробуйте объявлять процедуру так:
и раскомментируйте строки с объявлением массива и назначением его через функцию. Или массив объявите глобально. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
ikki Пользователь Сообщений: 9709 |
#16 01.02.2013 19:38:03 вообще-то странно
вполне штатно — в диспетчере задач при пошаговом режиме выделение памяти увеличивается по 150+ метров… по завершении процедуры — всё самоубивается (массив локальный). фрилансер Excel, VBA — контакты в профиле |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#17 01.02.2013 19:39:48 Саш, да вообще нужно, как ты советовал:
|
||
axtrace Пользователь Сообщений: 23 |
#18 01.02.2013 19:42:40
Первый — для примера. На нем не вылезает ошибка. |
||||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#19 01.02.2013 19:44:42
Так и объявляйте сразу динамический массив (см. мой пост выше) — и ReDim’мить не придётся. |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#20 01.02.2013 19:45:30
Неправда — совсем разные размеры. |
||
axtrace Пользователь Сообщений: 23 |
#21 01.02.2013 19:47:50
то есть просто убрать ReDim? Я так сделал, у меня в массив записалось <Out of memory>, программа благополучно продолжила работать, но вылезла ошибка о несуществовании объекта в дальнейшем, при попытке перенести данные из этого массива в другой |
||
axtrace Пользователь Сообщений: 23 |
#22 01.02.2013 19:50:52
я опечатался, вместо 1 500 000 указал 150 000. В файле уже исправил, все равно этот ReDim берет, на втором — ошибка |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#23 01.02.2013 19:58:48
Объявите массив, как указано, и присвойте ему значения из диапазона листа — никакой ошибки быть не должно. Не «просто убрать RedIm», а записать: массив = … |
||
axtrace Пользователь Сообщений: 23 |
#24 01.02.2013 19:59:17
может быть это ограничение разметки памяти в vba? |
||
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
Я полагаю проблема в том, что массив передается в процедуру ссылкой. А в этом случае память не высвобождается — VBA считает, что мы вроде как далее будем использовать переменную. И при повторном обращении с передачей ссылки у нас выделенный размер памяти может «слегка» увеличиватся. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
Михаил С. Пользователь Сообщений: 10514 |
#26 01.02.2013 21:52:01 А мне кажется, дело в простой нехватке физической памяти. Например, такой массив
на моем компе (win7, off 2010, 2 G) срабатывает, а такой
— «RunTime Error 7 — Out of Memory» |
||||
axtrace Пользователь Сообщений: 23 |
#27 01.02.2013 22:00:03
там же только адрес, откуда вызывается и адреса памяти массивов (по ссылке передаются параметры функции). это вроде бы немного. |
||
axtrace Пользователь Сообщений: 23 |
#28 01.02.2013 22:01:35
странно. у меня win7, off2010, 4Gb |
||
axtrace Пользователь Сообщений: 23 |
попробую я, в общем, делать кусками. Брать массив тысяч в 100 строк, преобразовывать его, записывать на новый лист, переходить к следующим 100 тыс. строк… Время, конечно, увеличится. Но хоть какое-то решение у меня будет. все большое спасибо за идеи! Надеюсь, вам пригодится где-нибудь когда-нибудь |
SvetaS_love Пользователь Сообщений: 132 |
#30 14.07.2015 20:39:10 Добрый День!
Как решили прошлую проблему? одинокий странник |
||
При выполнении макроса или просто работы с большим объемом данных в 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”
- 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.
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”.
3) This will open the Excel Options window; here you have to choose the “Formulas” tab from the left pane.
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.
Besides this, you can also approach the faster method of worksheet’s manual recalculation.
1) Follow this path: Formulas >Calculations Options> Manual
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.
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.
- After it, you need to unmark ‘Disable hardware graphics acceleration’ by going through File>Option>Advanced>Display.
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.
Step 2: Click on the Trust Center Settings and under the Trust Center settings, uncheck all checkboxes in Protected.
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.
- 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.
- 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
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.
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.
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.
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!
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, которые могут использоваться, но которые вы не используете — вы можете удалить их, чтобы освободить еще больше памяти.