Доброе утро всем,
Я пытаюсь создать форму в Excel, которая передает содержимое числа ячеек X (в приведенном ниже POC я использую только одну) в качестве параметров в хранимом процессе SAS, используянадстройка для Microsoft Office.У меня нет проблем с выполнением этой задачи для одного запроса, однако, когда я изменяю значение в A1 и снова отправляю код, я получаю следующее всплывающее окно, поскольку результаты предыдущего запроса уже отображаются в ячейке A10:
Запрос
Sub InsertStoredProcessWithPrompts()
Dim sas As SASExcelAddIn
Set sas = Application.COMAddIns.Item("SAS.ExcelAddIn").Object
'Delete and entries in the existing log
sas.ClearLog
'Setting Options
sas.options.ResetAll
sas.options.AutoInsertResultsIntoDocument = True
sas.options.PromptForParametersOnRefreshMultiple = False
sas.options.ShowStatusWindow = False
'Specify the Cell Used For Parameter Input
Dim age As Range
Set age = Sheet1.Range("A1")
'Capture The Prompts To Be Used As Parameters Within The Stored Process
Dim prompts As SASPrompts
Set prompts = sas.CreateSASPromptsObject
prompts.Add "AGE", age
Dim stp As SASStoredProcess
Set stp = sas.InsertStoredProcess("/User Folders/scmitchell/My Folder/Test Streams", Sheet1.Range("A10"), prompts)
End Sub
Второй результат выполнения
![enter image description here](https://i.stack.imgur.com/GVVpy.png)
В результате я добавил оператор If, чтобы определить, существует ли уже объект, связанный с сохраненным процессом.Если это так, то создайте сохраненный процесс, если нет, то измените параметры хранимого процесса, чтобы включить вновь определенное значение в приглашение AGE.
Запрос
Sub InsertStoredProcessWithPrompts()
Dim sas As SASExcelAddIn
Set sas = Application.COMAddIns.Item("SAS.ExcelAddIn").Object
If stp Is Nothing Then
'Delete and entries in the existing log
sas.ClearLog
'Setting Options
sas.options.ResetAll
sas.options.AutoInsertResultsIntoDocument = True
sas.options.PromptForParametersOnRefreshMultiple = False
sas.options.ShowStatusWindow = False
'Specify the Cell Used For Parameter Input
Dim age As Range
Set age = Sheet1.Range("A1")
'Capture The Prompts To Be Used As Parameters Within The Stored Process
Dim prompts As SASPrompts
Set prompts = sas.CreateSASPromptsObject
prompts.Add "AGE", age
Dim stp As SASStoredProcess
Set stp = sas.InsertStoredProcess("/User Folders/scmitchell/My Folder/Test Streams", Sheet1.Range("A10"), prompts)
Else
Set stp = stp.Modify("Test Streams")
End If
End Sub
Результат первого или последующего выполнения
![enter image description here](https://i.stack.imgur.com/qTCw5.png)
В качестве проблемы выделено следующее:
Dim stp As SASStoredProcess
Существует вероятность, что я двигаюсь в совершенно неверном направлении, поэтому, пожалуйста, не стесняйтесь предлагать альтернативные решения, однако вышеизложенное кажется достаточно обоснованным.Я извлек код «Если объект» из кода StackOverflow ( VBA проверяет, установлен ли объект ), но, возможно, я делаю элементарную ошибку, так как редко использую VBA.
Любая помощьбудет принята с благодарностью.
С уважением.
Скотт