我正在运行一个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
您的问题将通过增加实际的代码加以改进。 –
我已经添加了代码。你能否最早回顾并提出建议? –
除了你似乎有很多单独的查询之外,我确实没有太多建议。如果我与Oracle打交道,我通常直接使用ADO而不使用QueryTables。 –