Получение значения в VBscript из функции макроса VBA Excel - PullRequest
0 голосов
/ 30 мая 2018

Совершенно новый для VBscript и VBA ... в надежде на некоторую помощь и на то, что это простой ответ ...

Я вызываю макрос / функцию в Excel VBA из VBscript.Вызов функции должен вернуть номер.Используя отладку VBA в Excel, функция работает нормально (в этом примере она отображает значение 1), но когда я вызываю макрос / функцию и пытаюсь отобразить значение в VBscript, оно отображается как «Пусто».

Как я могу получить значение из VBA обратно в VBscript?
Спасибо за вашу помощь

Пример кода VBscript:

Set excelOBJ = CreateObject("Excel.Application")
Set workbookOBJ = excelOBJ.Workbooks.Open("C:\variable.xlsm")

excelOBJ.Application.Visible = True
excelOBJ.DisplayAlerts = False

REM mostly for testing purposes
    Dim returnValue
    returnValue = 10

    Wscript.Echo "'returnValue' value before call to macro function = " & returnValue
    Wscript.Echo "'returnValue' TypeName before call to macro function = " & TypeName(returnValue)

returnValue = excelOBJ.Run("ThisWorkbook.getNum")

    Wscript.Echo "'returnValue' value after call to macro function = " & returnValue
    Wscript.Echo "'returnValue' TypeName after call to macro function = " & TypeName(returnValue)

excelOBJ.quit

Пример VBA в Excel:

Public Function getNum()
    getNum = 1
    Debug.Print "getNum value = " & getNum
End Function

Вывод:

'returnValue' value before call to macro function = 10
'returnValue' TypeName before call to macro function = Integer

REM Inside Excel VBA editor
    getNum value = 1

'returnValue' value after call to macro function = 
'returnValue' TypeName after call to macro function = Empty

1 Ответ

0 голосов
/ 30 мая 2018

Я бы порекомендовал перенести ваш код в модуль, если его там еще нет.

Этот код следует изменить

returnValue = excelOBJ.Run("ThisWorkbook.getNum")

Если код находится на рабочем листе, это может сработать при условии, что выРабочий лист "Sheet1"

returnValue = excelOBJ.Run("Sheet1.getNum")

В противном случае, если он находится в модуле, просто используйте имя модуля

returnValue = excelOBJ.Run("Module1.getNum")

Если он запускается с этим изменением, но вы ничего не получите, вы вернетесь.может изменить вашу функцию, чтобы передать return value parameter ByRef и проверить это таким образом

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