将变量从一个子传递到另一个

Posted

技术标签:

【中文标题】将变量从一个子传递到另一个【英文标题】:Pass variable from one sub to another 【发布时间】:2018-01-14 16:03:56 【问题描述】:

如何将 sub run 中的 uniqueId 和 uniqueId 传递给 Sub DisplayCustomError。我试图通过 DisplayCustomError 但它给出“调用 Sub 时不能使用括号”。

预期结果:uniqueId 和 uniqueId 应该去 Sub DisplayCustomError 创建一个 json 对象。

sub run
    On Error Resume Next
    wrapper.getVariable( "IRR" ).value = excel.range( "'Cases'!$H$783" )
    Dim uniqueId , uniqueId , errorMessage
    If Err.Number <> 0 And excel.range( "'Cases'!$H$783" ) = "" Then
     errorCode = "MC2006"
     uniqueId = "12"                 
     errorMessage= "Error while executing EVMLite.           
     DisplayCustomError(errorMessage)
     On Error Goto 0         
     Call Err.Raise(vbObjectError + 10, "EVM Failed to execute. ", errorMessage)  
    End If      
end sub

Sub DisplayCustomError(errorMessage)
If Err.Number <> 0 Then
    Dim objHTTP, URL, json, uniqueId, networkInfo, jobId
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")    
    URL = "http://10.93.24.223:9005/vpp/logerror"
    objHTTP.Open "POST", URL, False
    objHTTP.SetRequestHeader "Content-Type", "application/json"
    json = """jobId"": """& jobId &""", ""uniqueId"": """& uniqueId &""", ""errorCode"": """& errorCode &""", ""errorMessage"": """& errorMessage &""""
    objHTTP.send (json)
 End If

结束子

【问题讨论】:

使用不带括号的DisplayCustomError errorMessage 或使用Call DisplayCustomError(errorMessage)。如果你想有多个参数,在你的子定义中用逗号分隔它们:Sub DisplayCustomError(errorMessage as String, UniqueID as Integer, Parameter as Integer) 不同的主题但是:进入 Sub DisplayCustomError(errorMessage) Err.Number 将始终为零,因为对 .DisplayCustomError() 的调用成功。因此,您对 Err.Number 的测试将始终为假。你已经知道你有一个错误,所以删除 Err.Number 0 的测试。 @RikSportel 我试图作为 Sub DisplayCustomError(errorMessage as String, UniqueID as Integer, Parameter as Integer) 传递,但它给出了错误“Expected ')'” 您确定粘贴的代码与实际项目中显示的完全一致吗?上面的代码不应该编译。您有一个重复的声明以及一个未正确关闭的字符串。 【参考方案1】:

Call 行从:

DisplayCustomError(errorMessage)

收件人:

DisplayCustomError errorMessage 

编辑1:传递多个参数:

首先,您需要重新定义您的Sub

Sub DisplayCustomError(errorMessage As String, uniqueId As Long)

然后,当你调用它时,确保你传递了正确数量和类型的参数:

DisplayCustomError errorMessage, uniqueId

顺便说一句,您可以使用不同的网络名称传递参数,它仍然可以工作。例如:

DisplayCustomError errorMessage, uniqueId

然后

Sub DisplayCustomError(errMsg As String, uId As Long)

编辑 2完整代码已编辑(相关部分)

Sub run()

    On Error Resume Next
    wrapper.getVariable("IRR").Value = Excel.Range("'Cases'!$H$783")

    ' modified the line below
    Dim uniqueId As String, errorMessage As String

    If Err.Number <> 0 And Excel.Range("'Cases'!$H$783") = "" Then
        ErrorCode = "MC2006"
        uniqueId = "12"
        errorMessage = "Error while executing EVMLite.           "
        DisplayCustomError errorMessage, uniqueId ' <-- modifed this line
        On Error GoTo 0
        Call Err.Raise(vbObjectError + 10, "EVM Failed to execute. ", errorMessage)
    End If

End Sub

Sub DisplayCustomError(errMsg As String, uID As String) ' <-- modifed this line

If Err.Number <> 0 Then
    Dim objHTTP, URL, json, networkInfo, jobId ' <-- removed uniqueId from this line
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://10.93.24.223:9005/vpp/logerror"
    objHTTP.Open "POST", URL, False
    objHTTP.SetRequestHeader "Content-Type", "application/json"

    ' --- modifed the line below ---
    ' *** WHere do you get the value of jobId and ErrorCode ***
    json = """jobId"": """ & jobId & """, ""uniqueId"": """ & uID & """, ""errorCode"": """ & ErrorCode & """, ""errorMessage"": """ & errMsg & """"
    objHTTP.send (json)
End If

End Sub

【讨论】:

我做到了,但我仍然无法获得多个参数 我尝试在子运行 DisplayCustomError errorMessage, uniqueId 和 DisplayCustomError(errorMessage As String, uniqueId As String) 但我仍然收到预期的错误')' @DevendraVastrakar 尝试定义像 Dim uniqueId As Long , errorMessage As String 这样的变量(而不是你的定义行) 我定义了 Dim uniqueId As Long ,errorMessage As String 现在它给出了错误“预期语句结束” @DevendraVastrakar 不确定你想传递什么参数,你能详细说明一下吗?他们的类型等。

以上是关于将变量从一个子传递到另一个的主要内容,如果未能解决你的问题,请参考以下文章

将对象从一页移动到另一页?

将数据从一种形式传递到另一种形式的问题

将核心数据数据库从一台设备传递/导出到另一台设备

通过DrawerNavigator中的StackNavigator将数据从一页传递到另一页

如何在单页应用程序中以角度将数据从一页传递到另一页

如何将数据从子视图传递到父视图到 SwiftUI 中的另一个子视图?