2014-04-16 11 views
0

오라클 데이터베이스에서 일부 데이터를 가져와 테이블 형식으로 표시하는 Excel 매크로를 실행 중입니다.VBA를 실행할 때 메모리 오류가 발생했습니다.

매크로 몇 분 동안 잘 실행 한 후 아래의 오류와 함께 제공 :

. "마이크로 소프트 ODBC 오라클 올바른 작업을 수행하는데 충분한 메모리를 할당 할 수있는 메모리를 확보하고 다시 시도하십시오 작업"

Oracle 용 Mirosoft ODBC에 대한 DSN 설정을 사용하여 데이터베이스에 연결 중입니다. 또한이 매크로는 Oracle 10g 클라이언트에서 XP를 실행 중이었습니다. 나는 Oracle 11g 클라이언트를 사용하여 Windows 7 (32 비트)에서이 문제를 직면하고 있습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

코드 : 제거 창 후 해결

Sub Refresh_Tables() 

Dim intHour_of_Day As Variant 

Sheets("Live Screen").Select 
Range("A1").Select 

Application.ScreenUpdating = False 



Sheets("Data2").Select 
Range("Hour_of_Day").Select 
intHour_of_Day = ActiveCell.Value 

'MsgBox ("1") 

Sheets("Data").Select 
Range("G4").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

Sheets("Data").Select 
Range("U4").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

'MsgBox ("2") 

Sheets("Data").Select 
Range("A25").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 


'MsgBox ("3") 
Application.ScreenUpdating = False 

If intHour_of_Day < 11 Then 

    ' Refresh all Tables 

Sheets("Data2").Select 
Range("B10").Select 

'MsgBox ("4") 

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("E10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("H10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("K10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("N10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 



Sheets("Data2").Select 

'MsgBox ("5") 

Range("Q9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("T9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("W9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("Z9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("AC9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

    ElseIf intHour_of_Day >= 11 And intHour_of_Day < 13 Then 

Sheets("Data2").Select 
Range("E10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("H10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("K10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("N10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

Sheets("Data2").Select 
Range("T9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("W9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("Z9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("AC9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

    ElseIf intHour_of_Day >= 13 And intHour_of_Day < 15 Then 

Sheets("Data2").Select 
Range("H10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("K10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("N10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

Sheets("Data2").Select 
Range("W9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("Z9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("AC9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 


    ElseIf intHour_of_Day >= 15 And intHour_of_Day < 17 Then 

    Sheets("Data2").Select 
Range("K10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("N10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

Sheets("Data2").Select 
Range("Z9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
Range("AC9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

Else 

'Update Running Total Tables 

Sheets("Data2").Select 
Range("N10").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

Range("AC9").Select 
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 

    End If 


Sheets("Live Screen").Select 
Range("A1").Select 

Application.ScreenUpdating = True 

End Sub 
+4

귀하의 질문 7 64 비트는 실제 코드를 추가하여 향상 될 것입니다. –

+0

코드를 추가했습니다. 가장 먼저 검토하고 조언 해 주시겠습니까? –

+0

별도의 쿼리가 많이있는 것 외에는 제안 할 수있는 것이별로 없습니다. 내가 Oracle을 다루는 중이라면 일반적으로 ADO를 직접 사용하고 QueryTables를 사용하지 않습니다. –

답변

1

문제 7 32 비트 및 Windows 설치

+0

일부 비 호환성이 있어야합니다. .NET과 같은 일부 라이브러리가 누락되어 시스템에 메모리가 부족할 수 있음을 유의하십시오 (메시지가 말한대로). x86은 최대 4GB RAM (3.25GB 유효) 만 사용할 수 있지만 x64는 무제한 RAM을 사용할 수 있습니다 (Microsoft는 Windows Edition을 Professional에서 128GB RAM까지 지원). – cybermonkey

관련 문제