1
votes

Gratter la date actuelle du site Web à l'aide d'Excel VBA

Erreur
entrez la description de l'image ici

Bibliothèques
entrez la description de l'image ici

J'ai besoin de la date du jour en cours. Je ne veux pas le placer dans une variable pour pouvoir le faire fonctionner, à la place je voudrais que cette variable soit Date ou dans sa chaîne par défaut.

Sub WEB()

    Dim IE As Object
    Dim allelements As Object

    Application.ScreenUpdating = False
    Set IE = CreateObject("InternetExplorer.Application")

    IE.navigate "http://www.fechadehoy.com/venezuela"
    Do Until IE.ReadyState = 4
        DoEvents
    Loop
    Application.Wait (Now + TimeValue("0:00:01"))
    IE.document.getElementById ("date")
    IE.Visible = True
    Set IE = Nothing
    Application.ScreenUpdating = True

End Sub

Le site Web est http://www.fechadehoy.com/venezuela

Je n'ai besoin que la date de cette page. Je ne suis intéressé par aucun autre élément de la macro.

J'ai juste besoin d'extraire la date actuelle et de la placer dans une variable.


0 commentaires

3 Réponses :


1
votes

si vous avez besoin de Lunes, 19 de août 2019 , utilisez getElementById pour fecha

 entrez la description de l'image ici

Debug.Print IE.document.getElementById("fecha").Innerhtml

entrez la description de l'image ici


0 commentaires

0
votes

Bien que la réponse donnée par @Siddharth Rout soit parfaitement correcte, il faudrait un peu de manipulation de chaîne pour obtenir la date sous une forme utilisable.

Pour la raison ci-dessus, je propose une solution alternative qui obtient le date dans un format directement utilisable, prêt à être manipulé et utilisé dans d'autres calculs si nécessaire.

En prime, je montre comment obtenir la date en utilisant une requête HTTP au lieu d'utiliser Internet Explorer. Cela rend le code plus efficace.

Option Explicit

Sub getDate()
Dim req As New WinHttpRequest
Dim doc As New HTMLDocument
Dim el As HTMLParaElement
Dim key As String
Dim url As String
Dim retrievedDate As Date
url = "http://www.fechadehoy.com/venezuela"
key = "Fecha actual: "

''''''''''Bonus: Use an HTTP request to get the date instead of opening IE'''''''''''
With req                                                                            '
    .Open "GET", url, False                                                         '
    .send                                                                           '
    doc.body.innerHTML = .responseText                                              '
    'Debug.Print .responseText                                                       '
End With                                                                            '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

For Each el In doc.getElementsByTagName("p")
    If el.innerText Like "Fecha actual*" Then
        retrievedDate = Mid(el.innerText, InStr(el.innerText, key) + Len(key), Len(el.innerText))
    End If
Next el

End Sub

Vous devrez ajouter une référence à Microsoft HTML Object Library et Microsoft WinHTTP Services version 5.1 . Pour ce faire, allez dans l'éditeur VB> Outils> Références.

Avoir la date dans ce format signifie qu'elle peut être facilement manipulée. Un exemple serait l'utilisation de fonctions telles que jour (retrievedDate) , mois (retrievedDate) , année (retrievedDate) etc.


4 commentaires

Ajoutez la bibliothèque, mais ne me laissez pas exécuter le code, "le type n'a pas été défini par l'utilisateur"


@EduardoGonzalez Désolé, j'ai oublié la deuxième référence. J'ai mis à jour ma réponse. Vous avez également besoin d'une référence à Microsoft WinHTTP Services version 5.1


Merci pour votre temps et votre réponse a été très utile pour mon projet. Bonne journée.


@EduardoGonzalez Heureux d'avoir pu vous aider!



1
votes

Pourquoi opter pour IE alors que xhr peut faire l'affaire? Vous pouvez obtenir la date en un clin d'œil si vous optez pour XMLHttpRequest.

Sub GetCurrentDate()
    Dim S$

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "http://www.fechadehoy.com/venezuela", False
        .send
        S = .responseText
    End With

    With CreateObject("htmlfile")
        .body.innerHTML = S
        MsgBox .getElementById("fecha").innerText
    End With
End Sub

Référence à ajouter:

Microsoft XML, v6.0
Microsoft HTML Object Library


4 commentaires

Cela me désigne comme l'erreur: "Nouveau XMLHTTP" et j'ai l'erreur "non défini par l'utilisateur"


Je viens de mettre à jour le fil avec une autre image, pouvez-vous le vérifier?


Merci pour votre temps et votre réponse a été très utile pour mon projet. Bonne journée.


Agréable et propre +