En essayant d'extraire UNE valeur à partir d'une page web à l'aide de VBA dans Excel
J'ai essayé de trouver des informations pour un couple de jours, mais tous les exemples que j'ai trouvé a juste un petit morceau de code, j'en ai besoin tous =)
Ce que je veux faire est d'extraire une valeur à partir d'une page d'accueil et le mettre dans une cellule dans Excel
(et puis prendre une autre valeur à partir d'une autre page du même site et de le mettre dans la cellule d'à côté, etc, etc.)
La page est un suédois de bourse de la page, et la page que j'ai utilisé comme un test de la page est le stock pour les "Investisseurs" B" ( https://www.avanza.se/aktier/om-aktien.html/5247/investor-b )
Et la valeur qui m'intéresse c'est celui qui est appelé "Senaste" (c'est la page des informations qui l'entoure)
<li>
<span class="XSText">Senast<br/></span>
<span class="lastPrice SText bold"><span class="pushBox roundCorners3" title="Senast uppdaterad: 17:29:59">248,60</span></span>
</li>
Et c'est la valeur 248,60 je suis après!
J'ai un peu de codage de l'expérience, mais pas pour VBA programmation, après avoir lu quelques forum de posts (surtout ici), j'ai essayé un peu par exemple moi-même, mais ne pouvait pas faire le travail.
Depuis que je suis tout à fait de base avec VBA, je pourrait avoir la structure de mal, alors, s'il vous plaît être de base et patient avec moi, c'était mon test, mais j'ai eu "erreur d'Exécution 429"
Composant ActiveX ne peut pas créer un objet
Je suis peut-être totalement fausse route
Private Sub CommandButton1_Click()
Dim ie As Variant
Set ie = CreateObject("InternetExplorer")
ie.navigate "https://www.avanza.se/aktier/om-aktien.html/5247/investor-b"
ie.Visible = True
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Application.Wait (Now() + TimeValue("00:00:016")) ' For internal page refresh or loading
Dim doc As Variant 'variable for document or data which need to be extracted out of webpage
Set doc = CreateObject("HTMLDocument")
Set doc = ie.document
Dim dd As Variant
dd = doc.getElementsByClassName("lastPrice SText bold")(0).innerText
MsgBox dd
End Sub
EDIT: 2014-05-12 code Actuel étant testés 17:05
sous le bouton de commande
Private Sub CommandButton1_Click()
Dim IE As Object
' Create InternetExplorer Object
Set IE = CreateObject("InternetExplorer.Application")
' You can uncoment Next line To see form results
IE.Visible = False
' Send the form data To URL As POST binary request
IE.Navigate "https://www.avanza.se/aktier/om-aktien.html/5247/investor-b"
' Statusbar
Application.StatusBar = "Loading, Please wait..."
' Wait while IE loading...
'Do While IE.Busy
' Application.Wait DateAdd("s", 1, Now)
'Loop
'this should go from ready-busy-ready
IEWait IE
Application.StatusBar = "Searching for value. Please wait..."
' Dim Document As HTMLDocument
' Set Document = IE.Document
Dim dd As Variant
dd = IE.Document.getElementsByClassName("lastPrice SText bold")(0).innerText
MsgBox dd
' Show IE
IE.Visible = True
' Clean up
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
Application.StatusBar = ""
End Sub
Et dans module1
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Function IEWait(p_ieExp As InternetExplorer)
'this should go from ready-busy-ready
Dim initialReadyState As Integer
initialReadyState = p_ieExp.ReadyState
'wait 250 ms until it's done
Do While p_ieExp.Busy Or p_ieExp.ReadyState <> READYSTATE_COMPLETE
Sleep 250
Loop
End Function
Comme dit plus tôt, je ne sais pas si j'ai eu la bonne structure avec ce dernier add-in, et non à l'expiration de ce genre de code, j'ai peur.
En Ce Qui Concerne Meilleur
Arrêter la modification 2014-05-12 17:08
Si je l'ajoute au-dessus de la ligne Private Sub CommandButton1_Click() je vais avoir le même comportement qu'avant Si je l'ai mis juste sous la ligne je vais vous obtenez un message d'erreur disant: "on Attend la fin des sous", de deviner la fonction ne peut pas être à l'intérieur de la command_button sous je ne sais pas si c'est hors sujet ou pas, mais certains ont avancé googler, ce que vous en pensez ? Meilleures Salutations social.msdn.microsoft.com/Forums/office/en-US/...
J'ai eu exactement le même message d'erreur décrite ci-dessus dans les deux cas, Vraiment merci pour le temps passé sur cette question. Il semble comme une excel 2013 problème, alternative, mon ordinateur problème. Aucune idée de la façon de continuer à chercher une réponse à la question ?
Ouais avec votre fichier que je voulais dire (avec les deux cas) Donc c'est à l'ordinateur/paramètres Donc je me demande comment je faire fonctionner votre code avec ma machine, a obtenu IE 9.0.8112.16421 mise à Jour de la version 9.0.26 des idées ?
Réussi à le tester dans excel 2010, la même erreur, depuis que je suis à l'étranger à l'instant, je n'ai pas la possibilité de le tester sur une autre machine, je vais essayer ce week-end, des idées pourquoi ce message d'erreur apparaissent ? J'exécute windows 7 Entreprise 64 bits
OriginalL'auteur Rycket | 2014-05-11
Vous devez vous connecter pour publier un commentaire.
Vous sont proches mais ont quelques petites erreurs.
Ici est de savoir comment je le configurer (Testé):
Résultats:
Testé dans Excel 2010, avec les références suivantes:
Edit - Option B
Pour se débarrasser d'une possible "Erreur d'Exécution '91'" essayer de changer quelques lignes comme ceci:
Edit - Option C
Encore une autre façon d'obtenir des éléments:
(Toutes les trois méthodes ont été testées sur Excel 2010 et IE10)
Je viens de tester sur un autre ordinateur en copiant ce code dans un nouveau document et il a fonctionné très bien. Quelle version d'Excel que vous utilisez? J'ai édité mon post pour afficher les références que j'ai active. Laissez-moi savoir si cela aide. Après cela, essayez d'exécuter à partir d'un nouveau fichier, juste pour écarter toutes les variables qui pourraient causer un problème.
Envisager d'ajouter une longue boucle d'Attente au lieu d'utiliser
Application.Wait
pour que la page se charge. J'ai vu cette erreur avant et je pense qu'il se pose parce que le document n'a pas fini de se charger. Voici comment faire: stackoverflow.com/questions/21335370/...Bonne idée, merci. Juste une remarque pour le OP - Si vous utilisez David suggestion, vous devez ajouter une référence à "
Microsoft Internet Controls
". Puis de remplacer les trois lignes de laDo While
boucle avec leIEWait IE
et copie enderlands bloc de code en haut de votre module.J'ai ajouté l'Option B & C, qui peuvent aider à se débarrasser de l'erreur que vous voyez. Ceux-ci ont été ajoutés au fichier, j'ai fourni un lien vers le module séparé.
OriginalL'auteur Portland Runner