从运行中获取函数的返回值
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
中的函数用作公式
【讨论】:
我对@987654325@ 提出了另一个问题,似乎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 的返回值