매크로에 대한 메모리 부족 오류 (Microsoft Excel)
Jeff는 VBA를 사용하여 PDF 형식의 수많은 보고서를 생성하는 정교한 Excel 통합 문서를 가지고 있습니다. 여러 PC에서 Excel 2013 32 비트에서 훌륭하게 실행됩니다. 반대로 Office 365를 실행하는 다른 여러 PC에서 출력 중간에 Jeff가 “메모리 부족”오류를 수신합니다.
따라서 매크로는 이전 버전의 Excel에서는 완벽하게 작동하지만 최신 버전에서는 작동하지 않습니다. (다시 한 번, Jeff는 여러 PC에서이를 테스트하여 결과를 반복 할 수 있도록했습니다.) Jeff는 Office 365에서이 문제를 일으킬 수있는 알려진 메모리 누수 또는 매크로 차이가 있는지 궁금합니다.
일반적으로 메모리 사용량은 변수와 매크로에서 사용되는 방법이라는 한 가지 주요 문제와 관련이 있습니다. 특히 가변 배열과 함께 작동합니다. 항상 모든 변수를 선언하고 (이와 관련하여 Option Explicit 지시문 사용) 엄청나게 큰 배열을 선언하지 않도록 배열 치수를 확인하는 것이 좋습니다.
객체 변수는 또한 많은 메모리를 사용할 수 있습니다. Set 키워드를 사용하여 개체를 변수에 할당하는 경우 완료되면 개체 변수를 Nothing으로 설정해야합니다. 이것은 루프 내부에서 특히 중요합니다. 루프를 통과 할 때마다 다른 객체 변수가 선언되고 루프를 반복 할 때마다 해당 변수를 지우지 못하면 메모리를 매우 빠르게 사용할 수 있습니다.
매크로가 회전을 진행하는 동안 화면 업데이트를 끄는 것도 중요합니다. 매크로가 화면을 지속적으로 업데이트하려고하면 리소스를 사용하고 매크로 속도가 느려집니다.
하지만 Jeff의 상황에서는 메모리 사용량이 큰 문제가 아니라고 생각할 것입니다. 결국 그는 32 비트 버전의 Excel에서 64 비트 버전으로 이동하고 있습니다. 이를 통해 Excel은 이전보다 더 큰 메모리 공간을 활용할 수 있습니다. 따라서 “메모리 부족”오류는 가능성이 높기보다는 낮을 것이라고 생각할 수 있습니다.
불행히도 여기에 혼합 할 렌치가 있습니다. “메모리 부족”오류가 발생하면 원인이 메모리가 아닐 수 있습니다.
Microsoft는 수년 동안이 특정 메모리가 본질적으로 일반적이며 거의 모든 원인으로 인해 발생할 수 있음을 문서화했습니다. (내 책에서는 오류 메시지를 쓸모 없게 만들지 만, 내가 누구인지 Microsoft에 의문을 제기합니다. 실망 스럽습니다!)
내가 고려할 다른 일은 (Jeff의 코드를 보지 못한 채) 선형 적으로 프로그래밍하지 않도록하는 것입니다. 즉, 코드를 작고 개별적인 작업을 수행하는 개별 서브 루틴으로 나눕니다. 그런 다음 메인 제어 루틴에서 각 서브 루틴을 호출 할 수 있습니다. 이것의 이점은 범위로 인한 메모리 관리입니다.
변수는 사용되는 프로 시저 내에서만 범위를 갖습니다.
(글로벌 스코프를 갖는 것으로 선언하지 않는 한 이것은 사실이지만 그것은 다른 물고기 주전자입니다.) 이것은 프로 시저 내에서 사용 된 변수가 파괴되고 프로 시저가 종료 될 때 자동으로 메모리가 해제됨을 의미합니다.
그러나 매크로가 선형으로 작성되어 서브 루틴이없는 경우 모든 변수는 매크로가 실행되는 동안 시스템에서 유지됩니다. 메모리 관리 관점에서 보면 메모리 사용을 최소화 할 수 있도록 코드를 프로 시저로 나누는 것이 좋습니다.
이러한 방식으로 코드를 모듈화 할 때의 또 다른 이점은 오류가 발생하면 일반적으로 쓸모가없는 “메모리 부족”조차도 발생한다는 것입니다.
오류-특정 절차 내에서 발생할 가능성이 높으므로 실제 오류가 발생하는 위치를 정확하게 파악할 수 있습니다. 제 생각에는 잠재적 인 실패 지점을보다 효율적으로 추적 할 수있는 능력이 큰 이점입니다.
그래도 문제가 해결되지 않으면 통합 문서를 저장할 때 VBA가 메모리 공간에서 가비지 수집을 수행하도록 강제한다는보고를 보았습니다. 이 때문에 일부 사람들은 매크로가 단지 매크로의 끝이 아니라 자주 통합 문서를 저장하도록 제안합니다. 이보고가 얼마나 정확한지 모르겠지만 이미 매크로를 사용하여 통합 문서를 저장하고 있다면 더 자주 저장하는 것이 아니라 더 자주 저장하는 것이 나쁠 수 없습니다.
언급해야 할 마지막 한 가지가 있습니다. 현재 Office 365 Business Premium을 사용중인 경우 SharePoint Online 및 Excel Web App이 포함됩니다. 따라서 이러한 버전은 Excel 파일의 크기를 10MB로 제한합니다. 파일이 상당히 큰 경우 Excel 2013에서는 제대로 작동했지만이 파일 크기 제한으로 인해 Office 365 Business Premium에서는 실패 할 수 있습니다.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (13619)은 Office 365의 Microsoft Excel 2007, 2010, 2013, 2016, 2019 및 Excel에 적용됩니다.