【发布时间】:2014-08-15 12:08:25
【问题描述】:
我希望这是一个合适的地方问这个问题。
我最近在 Excel 中构建了一个数据分析工具,该工具通过向 SAS 存储过程(作为“输入流”)提交输入、运行过程并在 Excel 中显示结果来工作。
我还使用一些代码在再次运行进程之前检查并从工作簿中删除所有活动的存储进程。
这在前 2 次成功运行,但在第三次尝试时失败。第三次尝试总是失败,我不知道为什么。
此阶段是否存在某种已耗尽的 Excel VBA 内存分配?还是其他一些已用尽的缓冲区?我已经介入了 VBA 代码的每一行,它似乎在以下行挂起(在第三次运行时):
SAS.InsertStoredProcess processLoc, _
outputSheet.Range("A1"), , , inputStream
用于启动 SAS Add-in for Microsoft Office 的代码:
Dim SAS As SASExcelAddIn
Set SAS = Application.COMAddIns.Item("SAS.ExcelAddIn").Object
用于从目标输出表中删除存储过程的代码:
Dim Processes As SASStoredProcesses
Set Processes = SAS.GetStoredProcesses(outputSheet)
Dim i As Integer
For i = 1 To Processes.Count
' MsgBox Processes.Item(i).DisplayName
Processes.Item(i).Delete
Next i
用于插入和运行存储过程的代码:
Dim inputStream As SASRanges
Set inputStream = New SASRanges
inputStream.Add "Prompts", inputSheet.Range("DrillDown_Input")
SAS.InsertStoredProcess processLoc, _
outputSheet.Range("A1"), , , inputStream
干杯
【问题讨论】:
-
这是个好问题,但我没有答案。我也使用 VBA 来调用存储过程,但从未见过这种情况。最好向 SAS 技术支持咨询。 support.sas.com
-
您可能会受益于将
Set SAS = Nothing、Set Processes = Nothing和Set inputStream = Nothing放在您的 VBA 过程的末尾。 (由于内存问题,我知道从 VBA 执行 SQL 存储过程时这是一个很好的做法。)