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

Posted

技术标签:

【中文标题】从运行中获取函数的返回值【英文标题】:Get A Function's Return Value From Run 【发布时间】:2014-11-03 16:05:21 【问题描述】:

我正在从 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

【问题讨论】:

据我所知,您正在正确使用 Run,因为它将返回一个布尔值,这正是 if 语句想要的。问题可能在于 result 未正确转换。 @Matt Hmmm... 但我看到它是从MsgBox 正确打印的? 可能是在错误的轨道上,但是这个MsgBox VarType(result) 在你的函数中的结果是什么 @Matt 它只是弹出一个显示“True”的消息框。 我刚刚在 Outlook 中调用了一个 Excel 文档测试了您的代码。你所做的和我所做的唯一不同的是我在Run 中的电话是"Module1.Foo", False。我的即时窗口打印正确。 【参考方案1】:

其他人可能有更冗长的答案,但总之你的逻辑是合理的。我一直在从ThisWorkbook 调用自定义函数时遇到问题。使用您的确切代码,我可以通过将代码移动到模块中来实现这一点

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

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

【讨论】:

我对@9​​87654325@ 提出了另一个问题,似乎ThisWorkbook 可能属于同一类:“不要使用它”类别。我当然想知道为什么微软有一些东西不能像宣传的那样工作。 @JonathanMee ThisWorkbook 我认为更适合工作簿活动。【参考方案2】:

我在 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

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

最好的问候

乔尔格

【讨论】:

以上是关于从运行中获取函数的返回值的主要内容,如果未能解决你的问题,请参考以下文章

为啥从函数返回数组作为参数时,我会从函数中的数组中获取随机值? [复制]

从函数中获取返回值的麻烦

从 plpgsql 函数中获取 Java ResultSet 的返回值

python 获取另一个py文件 中函数的返回值

从 Nodejs 中的 mySQL 获取数据时如何从 Async/await 函数获取返回值

有没有办法从函数中获取值而不返回它? [关闭]