Excel VBA 在字符串中放置额外的“{”时出现运行时错误?错误代码 -2147467260(80004004)

问题描述 投票:0回答:1

{ 似乎使 VBA 崩溃。

Sub CurlyError()
    Const URL = "https://jira.example.com/rest/api/latest/issue/issue-1111"
    Const vbDoubleQuote As String = """"
    Dim JiraService As New MSXML2.XMLHTTP60, ResponseTxt As String, sEncbase64Auth As String
    Dim data As String
       
    ' credentials
    sEncbase64Auth = EncodeBase64("USERNAME:PASSWORD")
   
    NoErrorData = "{" & vbDoubleQuote & "fields" & vbDoubleQuote & ":" & vbDoubleQuote & "customfield_555" & vbDoubleQuote & ":" & vbDoubleQuote & "2025-12-11" & vbDoubleQuote & "}}}"
    ErrorData = "{" & vbDoubleQuote & "fields" & vbDoubleQuote & ":{ " & vbDoubleQuote & "customfield_555" & vbDoubleQuote & ":" & vbDoubleQuote & "2025-12-11" & vbDoubleQuote & "}}}"
    Debug.Print (data)
    With JiraService
        .Open "PUT", URL, False
        .SetRequestHeader "Content-Type", "application/json"
        .SetRequestHeader "Accept", "application/json"
        .SetRequestHeader "X-Atlassian-Token", "nocheck"
        .SetRequestHeader "Authorization", "Basic " & sEncbase64Auth
        .Send (ErrorData)
        Debug.Print .ResponseText
    End With
End Sub

我总是可以打印数据线:

NoErrorData  {"fields": "customfield_13000":"2025-12-11"}}}
ErrorData {"fields":{ "customfield_13000":"2025-12-11"}}}

有了 NoErrorData 行,是 Jira 响应了 java 错误

com.atlassian.jira.rest.v2.issue.IssueUpdateBean[\"fields\"])

ErrorData 行在信息发送到 Jira 之前使 VBA 崩溃。 下面是运行上述代码所需的函数。

Public Function EncodeBase64(text As String) As String
    Dim arrData() As Byte
    arrData = StrConv(text, vbFromUnicode)
 
    Dim objXML As MSXML2.DOMDocument60
    Dim objNode As MSXML2.IXMLDOMElement
 
    Set objXML = New MSXML2.DOMDocument60
    Set objNode = objXML.createElement("b64")
 
    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = arrData
    EncodeBase64 = objNode.text
 
    Set objNode = Nothing
    Set objXML = Nothing
End Function
excel vba jira jira-rest-api
1个回答
-2
投票

对于那些面临同样问题的人,我不知道为什么会发生错误,但是可以在函数开始时用

On Error Resume Next
忽略它。

Sub CurlyError()
    On Error Resume Next
    Const URL = "https://jira.example.com/rest/api/latest/issue/issue-1111"
    Const vbDoubleQuote As String = """"
    Dim JiraService As New MSXML2.XMLHTTP60, ResponseTxt As String, sEncbase64Auth As String
    Dim data As String
       
    ' credentials
    sEncbase64Auth = EncodeBase64("USERNAME:PASSWORD")
   

    data = "{" & vbDoubleQuote & "fields" & vbDoubleQuote & ":{ " & vbDoubleQuote & "customfield_555" & vbDoubleQuote & ":" & vbDoubleQuote & "2025-12-11" & vbDoubleQuote & "}}}"
    Debug.Print (data)
    With JiraService
        .Open "PUT", URL, False
        .SetRequestHeader "Content-Type", "application/json"
        .SetRequestHeader "Accept", "application/json"
        .SetRequestHeader "X-Atlassian-Token", "nocheck"
        .SetRequestHeader "Authorization", "Basic " & sEncbase64Auth
        .Send (data)
        Debug.Print .ResponseText
    End With End Sub

代码来源

© www.soinside.com 2019 - 2024. All rights reserved.