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

我从Outlookmacros运行Excelmacros,我需要得到Excelmacros的返回。

我的Outlookmacros的代码如下所示:

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 

我的Excelmacros看起来像这样:

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

我的MsgBoxpopup并显示true,但在Outlook中,我总是打印“FALSE”。 我滥用Run吗?

其他人可能会有更详细的答案,但总之你的逻辑是正确的。 我一直有问题从ThisWorkbook调用自定义函数。 使用你的确切的代码,我能够通过将代码移动到一个模块来得到这个工作

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

这个问题显示了一个类似的问题,试图使用ThisWorkbook中的函数作为公式

我在Excel和MS Project的上下文中使用了Application.Run方法。 似乎没有办法从MS Project文件中的Excel中触发function,而不是触发一个方法。 后来我发现了让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 

我希望帮助某人,对我来说花了一点时间来弄清楚:)

最好的祝福

约尔格