VBA의 메모리 부족

Iqra Hasnain 2023년6월21일
VBA의 메모리 부족

이 기사에서는 몇 가지 예를 통해 VBA의 메모리 부족 오류에 대해 설명합니다.

VBA의 ‘메모리 부족’ 오류

매크로를 실행하는 동안 Excel에서 장치의 모든 리소스를 사용하면 VBA에서 메모리 부족 오류가 발생합니다. 코드를 계산하고 실행하는 데 메모리가 부족합니다.

많은 프로그램이 장치에서 실행 중이고 Excel에서 광범위한 매크로를 실행하려고 할 때 발생하거나 Excel에서 오류가 발생한 경우 영구 루프를 만들 수 있습니다.

너무 많은 워크시트와 행이 포함된 통합 문서로 작업하는 경우 VBA에서 메모리 부족 오류가 발생합니다. 상당한 양의 데이터로 작동하는 루프를 만들면 메모리 부족 오류가 발생합니다.

많은 객체로 작업하고 SET 문으로 모든 것을 설정하지만 루프 또는 절차 사이의 객체에 대한 참조를 지우지 않는 경우. 예를 들어 토론해 봅시다.

코드는 아래 루프에 표시되며, 여러 시트로 여러 파일을 열면 메모리 부족 오류가 발생할 수 있습니다.

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에서 개체 해제

루프와 객체로 작업할 때 객체를 사용한 후에는 객체를 NOTHING으로 설정해야 합니다. 더 이상 필요하지 않으면 메모리를 해제합니다.

set str = ""
set num = []

하나의 Excel 인스턴스만 실행 중인지 확인합니다. 방대한 파일과 많은 양의 데이터로 작업하는 경우 Excel에서 많은 세션이 열려 있지 않은지 확인해야 합니다.

필요한 경우 한 번 엽니다. 이를 확인하려면 작업 관리자로 이동하여 해당 시간에 실행 중인 Excel 인스턴스 수를 확인해야 합니다.

키보드에서 Ctrl+Alt+Delete를 누른 다음 작업 관리자를 클릭하여 Excel 인스턴스 하나만 실행되도록 합니다.

VBA에서 객체 해제(1)

마찬가지로 백그라운드에서 Excel이 실행되는 예가 없는지 작업 관리자에서 확인할 수 있습니다. 백그라운드 프로세스가 보일 때까지 작업 관리자를 살펴보고 Excel이 프로젝트에 대한 마음의 틀에 있지 않은지 확인하십시오.

VBA에서 객체 해제(2)

Excel 레코드의 크기를 확인하십시오. 빈번한 선과 세그먼트는 사용된 워크시트의 선과 세그먼트 아래에 있습니다.

성공은 이러한 세포가 비어 있는지 여부에 관계없이 이러한 세포의 기억을 포함합니다. 콘솔에서 CTRL+SHIFT+END를 눌러 문서 크기를 확인하여 셀 포인터가 있는 위치를 확인합니다.

사용 중인 마지막 셀 아래에 잘 위치한다고 가정하면 셀 포인터 위의 채워지지 않은 줄과 섹션을 모두 지우고 나중에 레코드를 다시 저장하십시오. Excel 문서의 크기가 줄어듭니다.

VBA에서 메모리를 확인하는 다른 방법

Excel에서 메모리를 비울 수 있는 다른 방법이 있습니다. 기발한 아이디어는 Excel을 사용하지 않을 가능성이 있을 때 닫았다가 나중에 여는 것입니다.

Excel이 저장된 모든 메모리를 느슨하게 하고 통합 문서를 열지 않아도 메모리를 유지하는 경향이 있습니다.

장치에서 업데이트를 확인하고 아직 사용하지 않을 VBA 추가 기능을 확인하여 Office 버전이 최신인지 지속적으로 확인하세요. 이를 제거하여 훨씬 더 많은 메모리를 사용할 수 있습니다.