Запуск макроса Excel cra sh при передаче ком-варианта - PullRequest
0 голосов
/ 06 января 2020

При запуске нашего приложения происходит сбой в следующей строке кода, *pResult = g_pExcel->Run(Temp1,argVariant);

Ниже приведен код. Я не могу найти причину сбоя. Есть ли проблема с преобразованием типов?

CExec::CallRunVbtFunc(BSTR MacroName,
                        SAFEARRAY** ArgVals,
                        int *pResult)
  {

      _bstr_t Temp1 (MacroName);

      CComVariant argVariant(*ArgVals);
      argVariant.vt = VT_ARRAY | VT_BSTR;

      *pResult = g_pExcel->Run(Temp1,
                               argVariant);

      return S_OK;
  }

Public Function MyTesting() As Long
    Dim aa(1) As String
    aa(0) = "aaa"
    aa(1) = "bbb"        

    TheExec.CallRunVbtFunc "Macro3", aa

    End Function

Sub Macro3(argc As String, argv As String)

    TheExec.WriteComment "Called Macro2 with args*************** "

End Sub

1 Ответ

0 голосов
/ 06 января 2020
  1. Метод Run принимает только аргументы VARIANT, а не массивы. См. MSDN

  2. Excel, как и все другие языки сценариев VB, и OLE-автоматизация могут обрабатывать только безопасные массивы VARIANT. Пожалуйста, проверьте, действительно ли ваш SAFEARRAY этого типа (SafeArrayGetVartype). В противном случае вам нужно переместить массив в безопасный массив VT_ARRAY | VT_VARIANT!

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