2016-02-16 7 views
2

В макросе VBA в Excel я пытаюсь вызвать функцию из одного модуля в другом модуле.Ошибка компилятора при вызове функции в другом модуле

Я могу успешно вызвать функцию в другом модуле ... но только если не учитывать возвращаемое значение из функции.

При попытке вызвать функцию в другом модуле и сохранить возвращаемое значение (MyReturnValue = Application.Run "Module2.MyFunctionInAnotherModule"), я получаю Ошибка компилятора: «Прогнозный: конец заявления».

Очевидно, что я получаю что-то не так в синтаксисе этого утверждения, но я не смог найти правильный синтаксис.

Module1:

Public Sub WhatGives() 
Dim MyReturnValue As String 

    ' Calling a subroutine in another module works 
    Application.Run "Module2.MySub" 

    MyReturnValue = MyFunctionInThisModule 
    MsgBox ("MyFunctionInThisModule() returned: " & MyReturnValue) 

    ' Calling a function in another module works if 
    ' I discard the return value of the function 
    Application.Run "Module2.MyFunctionInAnotherModule" 

    ' But calling a function and saving its return 
    ' value doesn't work. When I uncomment the following 
    ' statements, the second one results in the 
    ' compiler error: "Expected: end of statement" 
    'Dim MyReturnValue As String 
    'MyReturnValue = Application.Run "Module2.MyFunctionInAnotherModule" 
    'MsgBox("MyFunctionInAnotherModule() returned: " & MyReturnValue) 

End Sub 

Private Function MyFunctionInThisModule() 
    MsgBox ("MyFunctionInThisModule() invoked") 
    MyFunctionInThisModule = "Return value from MyFunctionInThisModule" 
End Function 

Модуль 2:

Private Sub MySub() 
    MsgBox ("MySub() invoked") 
End Sub 

Private Function MyFunctionInAnotherModule() As String 
    MsgBox ("MyFunctionInAnotherModule() invoked") 
    MyFunctionInAnotherModule = "Return value from MyFunctionInAnotherModule" 
End Function 
+0

Есть ли причина, что функция не может быть выполнена ** Публичная **? – Jeeped

+0

'' 'MyReturnValue = Application.Run (" Module2.MyFunctionInAnotherModule ")' ''? – dee

ответ

0

Вы должны вернуть значение к чему-то. Try xyz = Module2.MyFunctionInAnotherModule

Редактировать: К сожалению, вам также потребуется удалить Private из вашей функции.

Function MyFunctionInAnotherModule() As String 
    MsgBox ("MyFunctionInAnotherModule() invoked") 
    MyFunctionInAnotherModule = "Return value from MyFunctionInAnotherModule" 
End Function 
+0

Спасибо, что ответили, Сэм. К сожалению, удаление «Private» из функции не сработало. Такая же ошибка компилятора. –

+0

Интересно. Я смог назвать это без проблем. Вы пытались называть его xyz = Module2.MyFunctionInAnotherModule? то есть удалить Application.Run и кавычки. –

 Смежные вопросы

  • Нет связанных вопросов^_^