VBA EXCEL - SCARICARE TABELLE DAL WEB/2

Anonimo
2023-10-16T12:25:14+00:00

Buongiorno, torno sull’argomento in oggetto perché ci sono più metodi per importare tabelle dal WEB e per la stessa tabella un metodo può essere rapidissimo, un altro lentissimo. Non essendo un esperto non ne conosco il motivo. Con questa routine scarico la tabella in meno di 5 secondi, mentre con un'altra routine servono oltre 30 minuti e, poiché non tutte le ciambelle riescono col buco, il problema che ho con questa routine è che, pur funzionando alla perfezione, qualunque cosa le chiedo di fare dopo la riga IE.Quit, non la fa. Ho la sensazione che dopo avermi scaricato la Tabella resti qualcosa di aperto nell'esecuzione del codice che gli impedisca di proseguire con le istruzioni successive.
Per aggirare il problema sono stato costretto a scrivere una macro che ho chiamato ModificaTabella ed a farla partire manualmente con un apposito pulsante.
Avete qualche dritta o suggerimenti?
Grazie.

Sub ImportaATP2()

        Dim ws As Worksheet

        Dim qt As QueryTable

        Dim URL As String

        Dim IE As New SHDocVw.InternetExplorer

Columns("B:X").Delete

        URL = "https://live-tennis.eu/it/classifica-ufficiale-atp"

        Set ws = Worksheets("Foglio2")

        Set qt = ws.QueryTables.Add( _

            Connection:="URL;" & URL, _

            Destination:=Range("B3"))

            With qt

            .RefreshOnFileOpen = True

            .WebFormatting = xlWebFormattingRTF

            .WebSelectionType = xlSpecifiedTables

            .WebTables = "2"

            .Refresh

            End With

            IE.Quit

            Columns("J:X").Delete 'Riga d'esempio che non esegue così come non esegue, se la inserisco, l'istruzione Call ModificaTabella.

    End Sub

UTILIZZO OFFICE 2013

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

5 risposte

Ordina per: Più utili
  1. Anonimo
    2023-10-17T13:59:00+00:00

    Ciao Luigi,

    Ciao Norman, ho condiviso il mio file con te su onedrive.

    Scaricherò il tuo file più tardi oggi, non appena sarò in grado di farlo.

    Ho compreso il tuo suggerimento sull'utilizzo di Power Query per operare sulle tabelle e sicuramente è una bella scorciatoia rispetto a formule e VBA - anche se, a mio avviso, non ha lo stesso fascino. Sono un romantico ed il codice, oltre ad essere diventato una dipendenza, rimane per me poesia :)

    Non mi inchino a nessuno nel mio amore per la programmazione ma, a mio modesto parere, si dovrebbe sempre usare lo strumento più appropriato nella propria cassetta degli attrezzi: adoro i grandi martelli ma, se inserisco le viti, trovo più utile un cacciavite! 😊

    Sono sicuro che una volta che avrai acquisito familiarità con il linguaggio M, su cui si basa Power Query, e ne apprezzerai la versatilità e l'utilità, imparerai ad amare anche questo! Nel frattempo, gran parte delle funzionalità di Power Queries sono disponibili direttamente dall'interfaccia PQ, senza la necessità di scrivere o comprendere il codice sottostante.

    In sintesi, credo che un uomo che ama la poesia possa ammirare e apprezzare poeti di generi diversi! 😊

    A presto!

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-10-17T11:52:48+00:00

    Ciao Norman, ho condiviso il mio file con te su onedrive.
    Ho compreso il tuo suggerimento sull'utilizzo di Power Query per operare sulle tabelle e sicuramente è una bella scorciatoia rispetto a formule e VBA - anche se, a mio avviso, non ha lo stesso fascino. Sono un romantico ed il codice, oltre ad essere diventato una dipendenza, rimane per me poesia :)

    Ciao, grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-10-17T03:42:39+00:00

    Ciao Luigi,

    Se fossi in te, in questa occasione, eviterei l'uso di VBA e sfrutterei invece Power query.

    Ciò consentirà, tra l'altro, la la facile selezione delle colonne di output e l'esclusione delle righe vuote o indesiderate. Inoltre, il formato delle colonne della tabella di output può essere quello della tabella del sito web o qualsiasi alternativa che si desidera. L'aggiornamento della tabella può essere eseguito molto facilmente, sia dall'interfaccia di Excel o con il clic di un pulsante.

    Troverai un esempio di tale tabella nel mio file di prova Luigi (Power Query) 20231017.xlsm.

    Se spieghi come questa tabella dovrebbe essere adattata, aggiornerò e riordinerò il codice M sottostante alla query.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-10-16T18:21:53+00:00

    Ciao Norman, innanzitutto GRAZIE per il tuo file che ho scaricato.
    Scusami per aver dimenticato di dire che andava aperto il riferimento alla libreria Microsoft Internet Controls, senza la quale il codice va in errore.
    In effetti, il risultato rimane lo stesso sia nel mio codice che con l'aggiunta della tua Call ovvero in entrambi i casi la tabella viene scaricata sul Foglio2 ma, dopo averla scaricata ti consente di modificarla solo manualmente oppure in VBA, creando una macro che però sarà eseguita non automaticamente richiamandola con una Call, ma solo con un pulsante.
    Infatti se, dopo l'istruzione IE.Quit, provi a mettere un'istruzione tipo:
    Row("3:10").Delete
    oppure un'istruzione tipo:
    Columns("B:B").ColumnWidth=6 : Columns("J:X").Delete

    il codice non verrà eseguito. Infatti per modificare la Tabella, ho dovuto scrivere, com'è ovvio, delle macro col codice necessario, ma per farle partire ho dovuto aggiungere per forza un pulsante perché le Call dopo l'istruzione IE.Quit non le fa partire. Io credevo che la tua Call servisse ad informare che lo scarico della tabella fosse stato eseguito, invece la tabella viene scaricata solo dopo l'OK. Quindi quella Call, non cambia nulla rispetto a quello che volevo fare in un colpo solo e cioè scaricare la tabella e modificarla per:

    1. eliminare tutte le righe inutili (vuote) e lasciare solo le 1000 righe della classifica
    2. eliminare le colonne che non mi interessano
    3. aggiungere (modificando anche la larghezza delle colonne) altre due piccole tabelle che ricavo entrambe dalla tabella iniziale.
      Le tre cose le ho ottenute non in un colpo solo, ma aggiungendo un secondo pulsante. Col primo scarico la tabella e col secondo le faccio fare le modifiche.
      Ho guardato il tuo file, ma non ho compreso se il foglio1 lo generi in automatico o manualmente perché non ho trovato formule, macro o codice che potesse indicarmelo.

    Ancora grazie, ciao.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2023-10-16T14:40:50+00:00

    Ciao Luigi,

    Dopo aver impostato un riferimento alla libreria Microsoft Internet Controls, il tuo codice ha funzionato per me le istruzioni inserite dopo la riga

        IE.Quit

    sono state eseguite senza problemi.

    Ho leggermente modificato il tuo codice, come di seguito, per renderlo più robusto e flessibile. Ad esempio, il codice non funzionerebbe come previsto se il foglio Foglio2 non fosse il foglio attivo.

    '========>>

    Option Explicit

    '-------->>

    Public Sub ImportaATP2()

        Dim ws As Worksheet

        Dim qt As QueryTable

        Dim URL As String

        Dim IE As New SHDocVw.InternetExplorer

        URL = "https://live-tennis.eu/it/classifica-ufficiale-atp"

        Set ws = Worksheets("Foglio2")

        With ws

            .Columns("B:X").Delete

            Set qt = ws.QueryTables.Add( _

                Connection:="URL;" & URL, _

                Destination:=.Range("B3"))

        End With

        With qt

            .RefreshOnFileOpen = True

            .WebFormatting = xlWebFormattingRTF

            .WebSelectionType = xlSpecifiedTables

            .WebTables = "2"

            .Refresh

        End With

        IE.Quit

        Call MsgBox(Prompt:="Fatto", _

            Buttons:=vbInformation, _

            Title:="REPORT")

    End Sub

    '<<========

    In alternativa al tuo approccio VBA, ho anche creato un report analogo di Power Query. Questo rapporto può essere aggiornato o aggiornato con un solo clic e fornisce una tabella Excel filtrabile.

    Puoi scaricare il mio file di test **** Luigi20231016.xlsm che include esempi degli approcci VBA e Power Query,

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento