2014-04-16 185 views
0

我正在运行一个Excel宏,它从Oracle数据库中提取一些数据并以表格格式显示。运行VBA时出现内存错误

宏运行正​​常几分钟,然后用下面的错误出现:

“微软ODBC甲骨文不能分配的正常运行足够的存储空间,请释放一些内存,然后重试运行”

请注意,我使用Mirosoft ODBC for Oracle的DSN设置连接到数据库。另请注意,这个宏使用Oracle 10g客户端运行良好。我在使用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

您的问题将通过增加实际的代码加以改进。 –

+0

我已经添加了代码。你能否最早回顾并提出建议? –

+0

除了你似乎有很多单独的查询之外,我确实没有太多建议。如果我与Oracle打交道,我通常直接使用ADO而不使用QueryTables。 –

回答

1

发行后卸载Windows 7解决了32位和安装Windows 7 64位

+0

一定有一些不兼容。请注意,你可能已经错过了一些类似.NET的库,并且你的系统可能已经耗尽了内存(正如消息所述)。 x86只能使用高达4GB的内存(3.25GB有效),但x64可以使用无限量的内存(微软将Windows版本升级到Professional至128GB内存)。 – cybermonkey