Надстройка SAS для Microsoft Office - VBA для обновления параметров, передаваемых в сохраненный процесс - PullRequest
2 голосов
/ 25 июня 2019

Доброе утро всем,

Я пытаюсь создать форму в 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

В результате я добавил оператор 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

В качестве проблемы выделено следующее:

Dim stp As SASStoredProcess

Существует вероятность, что я двигаюсь в совершенно неверном направлении, поэтому, пожалуйста, не стесняйтесь предлагать альтернативные решения, однако вышеизложенное кажется достаточно обоснованным.Я извлек код «Если объект» из кода StackOverflow ( VBA проверяет, установлен ли объект ), но, возможно, я делаю элементарную ошибку, так как редко использую VBA.

Любая помощьбудет принята с благодарностью.

С уважением.

Скотт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...