我为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
我调用此函数并测试它是否相应地返回True
或False
:
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
命令永远不会运行。我希望你的帮助告诉我为什么?
谢谢。
答案 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