函数始终返回False。为什么?

时间:2014-05-08 14:20:45

标签: vba outlook-vba

我为ThisOutlookSession的每个邮件项目都有一个VBA脚本,忽略代码中与我当前问题无关的部分,我正在调用以下函数:

Function WriteBatFile(inVar As String) As Boolean
On Error GoTo err_handle:

    Dim sFile As String
    sFile = "C:\Users\ME\Desktop\myScript.bat"

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim oFile As Object
    Set oFile = fso.CreateTextFile(sFile)

    oFile.WriteLine "sleep 2"
    oFile.WriteLine "./myScript.sh " & inVar
    oFile.WriteLine "exit"
    oFile.Close

    Set fso = Nothing
    Set oFile = Nothing

    'MsgBox "Setting True", vbInformation
    WriteBatFile = True

err_handle:
    'MsgBox "Setting false. Code: "
    WriteBatFile = False
    Exit Function
End Function

我调用此函数并测试它是否相应地返回TrueFalse

result = WriteBatFile(match.Value)
    If result = True Then
        retval = Shell("""C:\Program Files (x86)\PuTTY\plink.exe"" -ssh ME@MYSERVER -m C:\Users\ME\Desktop\runThese.bat", vbNormalFocus)
    End If

然而,当调用该函数时,MsgBox显示它正在设置True,但另一个MsgBox显示该函数正在设置False。也许问题是行WriteBatFile = True

当然,Shell命令永远不会运行。我希望你的帮助告诉我为什么?

谢谢。

3 个答案:

答案 0 :(得分:5)

你的err_handle只是一个简单的陈述,它只是告诉编译器,对于err_handle语句,行X被称为GoTo。没有什么能阻止代码直接通过它。解决问题的最佳方法是在将Exit Function设置为True后将行WriteBatFile移至右侧。所以固定代码看起来像这样:

'MsgBox "Setting True", vbInformation
WriteBatFile = True
Exit Function

err_handle:
    'MsgBox "Setting false. Code: "
    WriteBatFile = False
End Function

err_handle设置为False后的WriteBatFile中,程序将在到达End Function时自动退出该函数。我希望这有帮助!

答案 1 :(得分:1)

我的想法是始终达到error_handle标签。运行成功代码后,您需要退出该功能。在Exit Function

之后添加WriteBatFile = True

答案 2 :(得分:0)

如果没有错误,代码会使WriteBatFile等于true,则将其设为false。

 WriteBatFile = True

err_handle:
    'MsgBox "Setting false. Code: "
    WriteBatFile = False

做一些像

这样的事情可能会更好
If err.number <> 0 then

    WriteBatFile = False

Else

   WriteBatFile = True

End If