2014-11-03 4 views
2

Я запускаю макрос Excel из макроса Outlook, и мне нужно получить возврат макроса Excel. КодПолучить возвращаемое значение функции из Run

мой взгляд макроса выглядит следующим образом:

Dim excelApp As Object 

Set excelApp = CreateObject("Excel.Application") 
excelApp.Workbooks.Open "C:\Users\meej\Documents\Book1.xlsm" 

If excelApp.Run("ThisWorkbook.Foo", true) Then 
    Debug.Print "TRUE" 
Else 
    Debug.Print "FALSE" 
End If 
excelApp.Quit 
Set excelApp = Nothing 

My Excel Macro выглядит следующим образом:

Public Function Foo(ByVal result as Boolean) as Boolean 
    Foo = result 
    MsgBox Foo 
End Function 

Мои MsgBox выскакивает и показывает верно, но в Outlook, я всегда печатать "FALSE". Я злоупотребляю Run?

+0

Из того, что я собираюсь, вы используете Run правильно, так как он вернет логическое значение, которое хочет выполнить оператор if. Проблема может заключаться в том, что «результат» неверен. – Matt

+0

@Matt Хммм ... но я вижу, что он печатает из 'MsgBox' правильно? –

+0

Возможно, на неправильном треке, но что является результатом этого 'MsgBox VarType (result)' внутри вашей функции. – Matt

ответ

2

У другого есть еще более подробный ответ, но вкратце ваша логика звучит. У Ive всегда были проблемы с вызовом пользовательских функций от ThisWorkbook. Используя ваш точный код, который я смог получить эту работу, перемещая код в модуль

If excelApp.Run("Module1.Foo", true) Then 

Это question показывает аналогичный вопрос пытается использовать функции из ThisWorkbook как формулы

+0

У меня есть другой вопрос, который стоит вокруг для 'UsedRange', похоже, что' ThisWorkbook' может просто попасть в одно и то же: «Просто не используйте его». Я точно хотел бы знать, почему у Microsoft есть вещи, которые просто не работают, как рекламируются. –

+0

@JonathanMee ThisWorkbook, я думаю, больше для рабочего книжного события, если ничего другого. – Matt

+0

рабочая книга события * – Matt

1

я использовал метод Application.Run в контексте Excel и MS Project. Кажется, что нет способа вызвать FUNCTION из Excel в файле MS Project, а не запускать метод. Позже я нашел работу вокруг позволяя Excel общаться с MS-Project:

ИЗ Excel:

Function doSomethingInProject() 

Dim params(0 To 1) As String 
params(0) = "Some param" 
params(1) = "RETURN_VALUE" 

Dim prj As Object 
Set prj = CreateObject("msproject.application") 

prj.FileOpen Name:=filename, ReadOnly:=False, FormatID:="MSProject.MPP" 
prj.Application.Run "runTheMethod", params 

prj.FileSave 
prj.FileClose 
prj.Quit 

Msgbox "return value is " & params(1) 

End Function 

в рамках проекта:

Sub runTheMethod(ByRef params) 

'do stuff with params(0) 
params(1) = "Return any value" 

End Sub 

Я надеюсь, что кто-то помогает, для меня это заняло немного времени, чтобы понять это :)

С уважением

Joerg

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