我正在运行一个excel宏,它从oracle数据库中提取一些数据并以表格格式显示。
宏可以运行几分钟,然后出现以下错误:
“Microsoft ODBC Oracle无法为正常操作分配足够的内存。请释放一些内存并重试操作”
请注意,我使用Mirosoft ODBC for Oracle的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
答案 0 :(得分:1)
问题已解决