2017-04-26 5 views
1

VBA와 함께 32 비트 2013 Excel을 광범위하게 사용하고 있습니다. 하드웨어 그래픽 가속 및 COM 추가 기능을 사용할 수 없도록 설정했지만 아직 다음과 같은 문제로 어려움을 겪고 있습니다.Excel VBA : 메모리가 두 번째 가져 오기에서 제한을 초과합니다.

수식이없는 다른 큰 통합 문서의 내용을 셀에 가져 오는 중입니다 (~ 3MB Excel 파일). 문제가되는 Excel 통합 문서 첫 번째 시도에서 - 내용을 아직 가져 오지 않았 으면 가져 오기가 성공합니다.

Application.Workbooks(F_Home).Activate 
Workbooks(F_Home).Sheets(Sheet1).Visible = xlSheetVisible 
... 
Application.Workbooks(F_Source).Activate 
Workbooks(F_Source).Sheets(S_Source).Cells.Copy Destination:=Workbooks(F_Home).Sheets(Sheet1).Cells 
Application.Workbooks(F_Home).Activate 

F_Home이 문제가 Excel 통합 문서이며 F_Source 다음 우리가 가져 오는 내용에 통합 문서입니다 작동이 처음 수행 할 때, 그리고 :. 다음 코드와 유사한 VBA를 통해 컨텐츠를 수입하고 파일을 저장하고 닫은 다음 파일을 다시 열고 두 번째 시도하십시오. F_Home 통합 문서가 F_Source 내용을 복사하는 줄에 메모리 부족 오류 (이 작업을 완료하는 데 필요한 메모리가 부족합니다 ...)가 발생하여 두 번째로 내용을 가져 오려고하면 (내용을 이미 가져온 경우) F_Home 통합 문서가 충돌합니다. F_ 홈.

프로세스 탐색기를 사용하여 Excel 프로세스는 대개 가상 메모리 크기에서 약 600mb - 700mb를 실행하지만 VBA 스크립트를 실행하여 두 번째 내용을 가져올 때 가상 메모리 크기가 갑자기 4GB로 증가합니다 이것은 600mb - 700mb 범위에 머물러있는 처음으로 발생하지 않습니다.) 이 문제를 어떻게 해결해야합니까? 파일의 타임 스탬프가 사용되고 VBA를 통해 파일을 저장하면 일부 사용자를 혼란스럽게하기 때문에 내용을 두 번 가져 오기 전에 파일을 저장하는 등의 해결 방법을 사용할 수 없습니다.

도움 주셔서 감사합니다.

+0

통합 문서에서 가져올 내용이없는 수식이 없습니다. – haans

+1

문제는 1048576 * 16384 셀을 복사한다는 사실에서 비롯됩니다. 그게 얼마나 큰지 알지? 정말로해야합니까? 데이터가있는 범위 만 복사 할 수 있으며 계산 속도가 훨씬 빨라지고 계산 비용이 적게 듭니다. – Masoud

+0

또한 수식이없는 경우 복사/붙여 넣기 대신 범위에 할당하는 것이 좋습니다. – Masoud

답변

0

전체 시트를 복사하여 붙여 넣는 것은 현명한 방법이 아닙니다. "A1 : Z99999"의 데이터가 있다고 가정 해 봅시다. 훨씬 더 빨라질 수 있습니다.

Set S_Range = Workbooks(F_Source).Sheets(S_Source).Range("A1:Z99999") 
Set H_Range = Workbooks(F_Home).Sheets(Sheet1).Range("A1:Z99999") 

H_Range.Value = S_Range.Value 

why you should avoid selecting and activating in vba도 읽어야합니다.

+0

불행히도이 방법을 사용하여 데이터를 복사 할 때 문제가 발생했습니다. 디버깅 모드에서 S_Range 변수는 F_Source 통합 문서의 모든 데이터로 채워지고 데이터는 F_Home 통합 문서로 복사됩니다. 그러나 코드를 디버깅하고 스테핑하지 않고이 함수를 호출하면 F_Source 통합 문서에있는 수천 개의 행과 비교하여 3 행의 데이터 만 복사합니다. – haans

+0

귀하의 질문에 귀하가 사용하고있는 정확한 코드를 포함 시키십시오 (http://stackoverflow.com/posts/43644970/edit). 이 문제는이 코드 부분에는 아무 것도 없습니다. 뭔가 다른 것을 유발합니다. – Masoud