Estoy tratando de escribir VBA para publicar json a una api y analizar los resultados en una hoja de cálculo. Puedo generar el JSON y estoy seguro que puedo analizar el resultado de lo que necesito.

Sé que hay herramientas en línea para convertir json a vba y atrás del navegador y complementos a las peticiones post, pero yo soy el único en la oficina que puede hacer esto así que si estoy enfermo o en dejar que me gustaría automatizar. Para ello tengo que enviar el json y tal vez la tienda de la respuesta para que yo pueda analizarlo.

Soy nuevo en la codificación para la publicación de una solicitud como esta por encima de mi cabeza.
Hasta ahora tengo el siguiente código para escribir el json. Agradecería cualquier ayuda en hacer que me inició. Si es necesario me pueden enviar un ejemplo de json o la api me gustaría publicarlo.

Disculpas por la mala código sé que puedo mejorar, pero desea obtener la respuesta en json como creo que va a ser la parte más difícil.

EDICIÓN se Han logrado algunos progresos. Ahora puede enviar una cadena JSON a la URL y obtener la respuesta. Sin embargo, es que siempre devuelve un error:

«{
«el mensaje»»: «»se ha producido Un error.»»

Si puedo enviar manualmente el json con httpRequestor el resultado se devuelve correctamente.
Esto parece sugerir que en algún lugar en el código JSON se mezclen o modificado de alguna forma cuando se está siendo publicado.

Actualizado el código de abajo. (Ha eliminado cualquier referencia a datos reales)

EDITAR 2 fijo y de trabajo.
Quita las citas de

objHTTP.enviar («Json»)

    Private Sub CommandButton21_Click()
Dim h_1 As String
Dim h_2 As String
h_1 = Range("A1")
h_2 = Range("B1")
h_3 = Range("C1")
h_4 = Range("D1")
h_5 = Range("E1")
h_6 = Range("F1")
sv_1 = 2
sv_2 = 2
sv_3 = 2
sv_4 = 2
sv_5 = 2
sv_6 = 2
For f = 15 To 21
v_1 = Range("A" & sv_1)
v_2 = Range("B" & sv_2)
v_3 = Range("C" & sv_3)
v_4 = Range("D" & sv_4)
v_5 = Range("E" & sv_5)
v_6 = Range("F" & sv_6)
y = "[{""" & h_1 & """:""" & v_1 & """,""" & h_2 & """:""" & v_2 & """,""" & h_3 & """:""" & v_3 & """,""" & h_4 & """:""" & v_4 & """,""" & h_5 & """:""" & v_5 & """,""" & h_6 & """:""" & v_6 & """ }]"
Range("A" & f).Value = y
sv_1 = sv_1 + 1
sv_2 = sv_2 + 1
sv_3 = sv_3 + 1
sv_4 = sv_4 + 1
sv_5 = sv_5 + 1
sv_6 = sv_6 + 1
Next f
Dim objHTTP As Object
Dim Json As String
Json = Range("A15")
Dim result As String
'Set objIE = CreateObject("InternetExplorer.Application") ' Don't think this is needed
'objIE.navigate "about:blank" ' Don't think this is needed
'objIE.Visible = False ' Don't think this is needed
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URl = "http://myApi/iSendJsonTo"
objHTTP.Open "POST", URl, False
'objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/json"
objHTTP.send ("Json")
result = objHTTP.responseText
'objIE.document.Write result ' Don't think this is needed
'Some simple debugging
Range("A25").Value = result
Range("A26").Value = Json
Set objHTTP = Nothing
  • Describir las acciones que se están haciendo de forma manual, y que desea automatizar.
  • Convertir los datos en json y publicarlo en una URL con httpRequester (complemento de Firefox en). Copia de la respuesta json y convertir de nuevo a excel, a continuación, pegar los datos en excel. Estoy usando convertcsv.com para convertir los datos de ida y vuelta. Lo que me gustaría hacer es utilizar vba para analizar los datos en lugar de copiar a convertcsv.com que puedo hacer con la manipulación de cadenas y uso de excel para enviar el json y obtener la respuesta json que parece más difícil.
  • Encontrado algunos buenos código en el stackoverflow.com/questions/23663149/… fue capaz de enviar el json pero el resultado es incorrecto. Editado pregunta con más info.
  • Fijo. Gracias omegastripes para publicar 🙂
InformationsquelleAutor deving | 2015-03-12

1 Comentario

  1. 4

    Aquí está el código que está enviando el JSON, limpiado un poco.

        Dim objHTTP As Object
    Dim Json As String
    Json = Range("A15") 'here I am pulling in an existing json string to test it. String is created in other VBA code
    Dim result As String
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URl = "http://myApi/iSendJsonto/"
    objHTTP.Open "POST", URl, False
    objHTTP.setRequestHeader "Content-type", "application/json"
    objHTTP.send (Json)
    result = objHTTP.responseText
    'Some simple debugging
    Range("A25").Value = result
    Range("A26").Value = Json
    Set objHTTP = Nothing
    • Cómo hacer lo mismo con partir de internet explorer.Objeto de la aplicación?

Dejar respuesta

Please enter your comment!
Please enter your name here