2014-11-03 50 views
2

我从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弹出并显示真实的,但在Outlook中我总是打印 “FALSE”。我是否滥用Run

+0

从我收集你正在使用正常运行,因为它会返回一个布尔值,这是if语句想要的。这个问题可能在于'result'没有被正确转换。 – Matt 2014-11-03 16:56:14

+0

@Matt嗯......但我看到它正确地从'MsgBox'打印? – 2014-11-03 17:01:27

+0

可能是在错误的轨道上,但这个'MsgBox VarType(result)'在你的函数里面的结果 – Matt 2014-11-03 17:11:10

回答

2

其他人可能有一个更详细的答案,但总之你的逻辑是健全的。我从ThisWorkbook总是有调用自定义函数的问题。使用您确切的代码我能够通过代码移入一个模块

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

question得到这个工作显示了类似的问题,试图为口诀

+0

我有另外一个问题在'UsedRange'中浮动,看起来像'ThisWorkbook'可能会陷入同样的​​情况:“不要使用它”类别。我当然想知道_why_微软在那里有东西,只是不能像广告一样工作。 – 2014-11-03 19:21:22

+0

@JonathanMee ThisWorkbook我认为更多的工作书事件,如果没有别的。 – Matt 2014-11-03 19:33:33

+0

工作簿事件* – Matt 2014-11-03 19:39:19

1

我使用Application.Run方法使用功能从ThisWorkbook在Excel和MS Project的背景下。似乎没有办法从MS Project文件中的Excel中触发FUNCTION而不是触发方法。后来我发现了一个变通方法,让Excel的使用MS-项目沟通:

从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 

WITHIN项目:

Sub runTheMethod(ByRef params) 

'do stuff with params(0) 
params(1) = "Return any value" 

End Sub 

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

最好的问候

Joerg

相关问题