从运行中获取函数的返回值
我从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
我的MsgBox
popup并显示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
我希望帮助某人,对我来说花了一点时间来弄清楚:)
最好的祝福
约尔格