两次运行后,在Excel中运行SAS存储过程失败

我希望这是一个适当的地方来问这个问题。

我最近在Excel中构build了一个数据分析工具,通过向SAS存储过程(作为“inputstream”)提交input,运行stream程并在Excel中显示结果。

我还使用一些代码来检查并删除工作簿中的所有活动存储的进程再次运行该过程之前。

这第一次2次成功运行,但第三次尝试失败。 它总是失败的第三次尝试,我不明白为什么。

Excel VBA中是否有这种内存分配方式? 还是其他一些最大的缓冲区? 我已经介入了VBA代码的每一行,它似乎挂起(在第三次运行)在下面的行:

SAS.InsertStoredProcess processLoc, _ outputSheet.Range("A1"), , , inputStream 

用于启动Microsoft Office的SAS加载项的代码:

 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 

干杯

我不知道这是否有用,但是我有一个类似的问题,运行用C ++通过VBA编写的DLL。 发生这个问题是因为DLL中的函数返回了一个double值,我不需要,所以VBA中的代码也做了

 Call SomeProcessFromDLL() 

但是这个过程正在返回一个双浮点值,它在VBA中“填充”了一些缓冲区内存,而VBA则有一个有限的缓冲区(我认为它在8次尝试中放弃了)。 所以我的解决scheme是

 Dim TempToDiscard as Double TempToDiscard = SomeProcessFromDLL() 

也许看被调用进程的文档在这里会有所帮助,特别是如果它返回一些值被丢弃,

 Return 0; 

我从来不喜欢在VBA中使用IOM,主要是由于引用问题,在推出应用程序时必须执行客户端安装。 去年,我发现了一个更好的连接Excel和SAS的方法 – 使用存储过程Web应用程序。 只需使用stream式输出设置您的服务器端SAS进程,并通过Excel Web查询传递您的input。 没有客户端安装,不用担心SAS版本升级,几乎没有任何代码 – 感到惊讶,不常使用!

请参阅: http : //rawsas.blogspot.co.uk/2016/11/sas-as-service-easy-way-to-get-sas-into.html