2011-09-27 5 views
0

초보 프로그래머가 여기 있습니다. 서버에서 12 시간 분량의 데이터를 복사하여 Excel에 표시하는 코드가 있습니다. 내 코드는 표시된 코드를 가져 와서 파일로 내 보내며 12 개월마다 추가하여 월별 데이터를 가질 수 있습니다.VBA : 메모리 부족 메모리 누수로 인한 오류 .... 수동으로 가비지 수집을 호출 할 수 있습니까?

내 문제는 20 일 정도 지나면 메모리가 부족하다는 것입니다. 이론적으로 원래 프로그램보다 훨씬 많은 데이터를 가져 오면 안되며 20 일 후에 메모리가 부족하여 메모리 누수가 발생한다고 말합니다. 오래된 Java 프로그램에서 나는 방금 일부 주파수로 가비지 컬렉터를 호출했고 문제는 사라졌다. excel-vba에서이를 수행 할 수있는 방법이 있습니까? 나는 아무것도 변수를 설정에 대해 읽었지만, 나는 많은 변수를 가지고 있고 실제 문제는 RAM과 같은 모든 읽기 - 데이터를 저장하는 것과 관련이 있다고 생각하고, 어떻게 설정 해야할지 모르겠다. 제로.

다른 흥미로운 비트 - 메모리로 인해 추락 한 후 Excel을 종료하지 않고 프로그램을 다시 시작할 수 없습니다. 그래서 충돌 후 메모리에있는 것들을 삭제하지 않습니까? 어떤 도움

지금까지 내가 당신의 질문을 이해

답변

1

에 대한

덕분에, 엑셀 프로그램은 여전히 ​​매일 (즉 내가 실행의 after 20 days 이해 한 기능) 실행하고 열린 상태로 유지됩니다.

Set myVar = Nothing을 사용하는 것은 여전히 ​​최선의 방법이지만이를 원하지 않는다고 가정합니다.

내가 생각할 수있는 것은 실행중인 코드의 끝에서 코드를 실행하고 응용 프로그램을 닫을 새 Excel 인스턴스를 만드는 것입니다. 같은

뭔가 :

'Don't forget to add the reference .. 
'Microsoft Excel X,X object library 

Sub myTest() 
Dim xlAPp As New Application 

' your code 

Set xlApp = Nothing 
End Sub 
+0

불만을 드려 죄송합니다. JMax에게 도움을 주셔서 감사합니다. 20 일 동안의 의미는 한 번에 12 시간 분량의 데이터를 복사하고 20 일 분량의 데이터가 지나면 시스템이 중단된다는 것입니다. 나머지를 복사하기 전에 12 시간 분의 데이터를 삭제하기 때문에 이것은 이해가되지 않습니다. 그래서 각각의 반복은 나에게 보이는 마지막 것보다 더 많은 기억을 사용해서는 안됩니다. 그러나 약 40주기 후에 나의 기억이 죽는다. 어떤 도움을 주셔서 감사합니다 –

+0

그것은 분쇄되기 전에 약 45 분 정도 실행됩니다. –

+0

그런 다음 관련 코드가 없으면 우리가 어떻게 도와 줄 수 있는지 알 수 없습니다. 각 실행에 대해 10 일 정도의 데이터를 수집하려면 코드를 더 분할해야합니다. Btw, 메모리 문제는 다른 곳에서 올 수 있습니다. 그리고 당신은 정확히 무엇이 발생했는지 오류를 알려야합니다 (Issun이 지적했듯이) – JMax

1

VBA는 전통적인 의미에서 가비지 컬렉션이 없습니다 - 그래서 특정 쿼리에 대한 대답은 '노 -하지만 참조의 수를 유지합니다. 따라서 메모리를 비우려면 더 이상 필요하지 않을 때마다 객체를 제안하거나 참조 해제해야합니다.