从运行中获取函数的返回值

时间:2014-11-03 16:05:21

标签: excel vba outlook return-value

我正在从Outlook宏运行Excel宏,我需要获得Excel宏的返回。

我的Outlook宏代码如下所示:

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

我的Excel宏看起来像这样:

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

我的MsgBox弹出并显示为true但在Outlook中我总是打印" FALSE"。我误用了Run吗?

2 个答案:

答案 0 :(得分:2)

其他人可能会有更详细的答案,但简而言之,你的逻辑是合理的。我总是遇到从ThisWorkbook调用自定义函数的问题。使用您的确切代码,我可以通过将代码移动到模块

来实现这一点
If excelApp.Run("Module1.Foo", true) Then

question显示了尝试使用ThisWorkbook中的函数作为公式

的类似问题

答案 1 :(得分:1)

我在Excel和MS Project的上下文中使用了Application.Run方法。似乎没有办法在MS Project文件中触发Excel中的FUNCTION而不是触发方法。后来我找到了让Excel与MS-Project进行通信的工作:

FROM Excel:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
…
private static final Logger LOGGER = LoggerFactory.getLogger(Something.class);

项目内容

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

我希望能帮助某人,对我而言需要一点时间才能弄明白:)

祝你好运

约尔格