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

Ale*_*ger 6 excel vba sas excel-vba

我希望这是一个提出这个问题的合适场所.

我最近在Excel中构建了一个数据分析工具,它通过将输入提交到SAS存储过程(作为"输入流"),运行流程并在Excel中显示结果来工作.

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

这前两次成功运行,但第三次尝试失败.它总是在第三次尝试失败,我无法弄清楚为什么.

Excel VBA是否有某种内存分配在这个阶段耗尽?还是其他一些最大化的缓冲区?我已经介入VBA代码的每一行,它似乎挂起(在第三次运行)在以下行:

SAS.InsertStoredProcess processLoc, _
    outputSheet.Range("A1"), , , inputStream
Run Code Online (Sandbox Code Playgroud)

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

Dim SAS As SASExcelAddIn
Set SAS = Application.COMAddIns.Item("SAS.ExcelAddIn").Object
Run Code Online (Sandbox Code Playgroud)

用于从目标输出表中删除存储过程的代码:

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
Run Code Online (Sandbox Code Playgroud)

用于插入和运行存储过程的代码:

Dim inputStream As SASRanges
Set inputStream = New SASRanges
inputStream.Add "Prompts", inputSheet.Range("DrillDown_Input")
SAS.InsertStoredProcess processLoc, _
    outputSheet.Range("A1"), , , inputStream
Run Code Online (Sandbox Code Playgroud)

干杯

hnk*_*hnk 0

我不知道这是否有用,但我在通过 VBA 运行用 C++ 编写的 DLL 时遇到了类似的问题。出现问题是因为 DLL 中的函数返回了一个双精度值,而我不需要该值,因此 VBA 中的代码需要这样做

Call SomeProcessFromDLL()
Run Code Online (Sandbox Code Playgroud)

但该过程返回一个双浮点值,该值“填满”了 VBA 中的一些缓冲区内存,并且 VBA 的缓冲区有限(我认为它在 8 次尝试时放弃了)。所以我的解决方案是

Dim TempToDiscard as Double
TempToDiscard = SomeProcessFromDLL()
Run Code Online (Sandbox Code Playgroud)

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

Return 0;
Run Code Online (Sandbox Code Playgroud)