Le fichier source .json est aussi simple que ceci: i peut renvoyer le Ceci fonctionne sans problèmes: p> mais quand j'essaie de remplacer Erreur d'exécution '438': Je pense que le problème réside dans VBA capitalisant automatiquement le taux se transforme automatique en p> "horodatage" code> valeur, mais en utilisant l'approche identique que je ne peux pas retourner le
"tarif" code> valeur. p>
TimeStamp code> avec
Noter code>, je reçois le message d'erreur en surbrillance sur la ligne code> msgbox code>. P>
L'objet ne prend pas en charge cette propriété ou cette méthode P>
blockQuote> code>. p>
MsgBox oJSON.rates.EURUSD.Rate
4 Réponses :
J'utilise Cet outil pour analyser la réponse JSON comme ceci:
With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://www.freeforexapi.com/api/live?pairs=EURUSD", False .send Set oJSON = ParseJson(.responseText) .abort End With
Merci pour votre participation. Je pense que sur un plus grand projet, ce serait la voie à suivre. Cependant, si possible, j'ai tendance à éviter des outils et des références externes.
Le contrôle de script fonctionnera pendant 32 bits plutôt que 64 bits.
Les suivants ont l'avantage de fonctionner sur les machines 32 et 64 bits p>
Utilisation de JSON Parser: < / forte> p> J'utiliserais également jsonconverter.bas (ajouter ensuite une référence à l'exécution de scripts Microsoft) et, car elle renvoie un dictionnaire à l'intérieur, vous pouvez tester la touche code> p> à l'aide de regex: strong> p> : strong> p>
Merci pour votre participation. Je pense que sur un plus grand projet, ce serait la voie à suivre. Cependant, si possible, j'ai tendance à éviter des outils et des références externes.
Ajouté une réponse de regex.
Une excellente solution pour les projets plus petits utilise callbyname code>
fonction. Pas une jolie, mais peut faire le travail en une seule ligne et qu'il ne nécessite pas d'importer des fichiers externes vers le projet ou d'ajouter des références.
Sub current_eur_usd() Dim scriptControl As Object Set scriptControl = CreateObject("MSScriptControl.ScriptControl") scriptControl.Language = "JScript" Dim oJSON As Object With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://www.freeforexapi.com/api/live?pairs=EURUSD", False .send Set oJSON = scriptControl.Eval("(" + .responsetext + ")") .abort End With MsgBox VBA.CallByName(VBA.CallByName(VBA.CallByName(oJSON, "rates", VbGet), "EURUSD", VbGet), "rate", VbGet) Set oJSON = Nothing Set scriptControl = Nothing End Sub
Une solution de contournement pourrait être en évaluant:
Set EURUSD = scriptControl.Eval("EURUSD = (" + .responsetext + ").rates.EURUSD") Debug.Print scriptControl.Eval("EURUSD.rate") Debug.Print EURUSD.timestamp
Pour que cela fonctionne, je devais le mettre à l'intérieur du bloc code> avec le bloc code>, mais je ressemble à la lisibilité de cette solution. Comme QHarr expliqué, scriptControl code> ne fonctionnera que sur un bureau 32 bits, mais ce n'est pas un problème. pour moi. Merci!
Découvrez [ Stackoverflow.com/Questtions/37710995/...
@Gareth - énormes merci! J'ai exploré toutes les options mentionnées et référencées dans cette question et a été capable de trouver la meilleure solution de compilation, c'est-à-dire
CallbyName code> fonction.
Après l'après, le Solution de Slai semble mieux à mes yeux.