Condividi:        

Importare tabelle da web

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Importare tabelle da web

Postdi aggittoriu » 15/02/22 15:16

Stamattina quella macro ha rifunzionato anche a me. Ma ci ha impiegato 40 minuti.
Il mio Excel improvvisamente, ha grossi problemi. Va lentissimo e ora è diventato inutilizzabile. :(
Ho provato a fare il ripristino di sistema, ma non è cambiato niente.

Mollo questa discussione, fino a quando non risolverò il problema. Perchè tanto è improponibile usare il vba con questa lentezza. La riprendo quando risolverò. Solo che non so dove andare a sbattere la testa per risolverlo questo problema. :cry:
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Sponsor
 

Re: Importare tabelle da web

Postdi Anthony47 » 15/02/22 15:46

Credo che sia un problema di pagina web, non (tanto) di Pc
A me (adesso) impiega 30-40 secondi di cui circa 20-30 solo per stabilizzare la pagina web; vengono poi importate circa 1960 celle su 10 tabelle; tempi di completamento molto aleatori ma confrontabili sia con Call1 (con IE) che con PrintTables (Selenium su Chrome).

Comunque tieni presente che sara' sempre piu' raro trovare siti che interfacciano InternetExplorer (quello usato dalle macro convenzionali), prima o poi devi passare su Edge o Chrome, e questo sara' possibile solo installando l'ambiente Selenium. Tanto vale portarsi avanti...
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 15/02/22 16:29

Eh... ma la pagina web è la stessa per te e per me. Solo che tu ci metti 40 secondi. Io 40 minuti. Quindi credo dipenda dal mio pc.

Solenium l'avevo installato. Solo che facendo il ripristino di sistema, l'ho perso. Quindi ora lo devo riinstallare. Però... sono riuscito a far girare velocemente le macro che usavo prima, mettendo a inizio e fine istruzione i codici
Codice: Seleziona tutto
Application.Calculation = xlManual
Application.Calculation = xlAutomatic
e ora mi disintossico un po' da excel. :)

Ci penserò domani.
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi aggittoriu » 17/02/22 18:04

Rieccomi! :oops:

Allora... ho scaricato e installato Selenium. Ho provato prima il file di prova. Funziona, ma è lento. Poi ho provato ad aggiungere anche lì i codici
Codice: Seleziona tutto
Application.Calculation = xlManual
Application.Calculation = xlAutomatic

e ha scaricato i dati molto più velocemente. Non ho capito perchè. Non ci sono formule da calcolare. Boh. :?:

Poi ho provato il codice che mi hai dato per le quote correct score. La seconda volta mi ha dato un errore. Ma tutte le altre volte ha completato tutto in circa 30 secondi. Non ci credo! :)

Però non ci capisco tanto di quel codice. C'è una discussione dove viene spiegato?

Per esempio.

Le sub Caller con GimmeTablesArr non mi importa nulla. Mi esce il messaggio finale "Informazioni raccolte...", ma la pagina rimane vuota.

Mi funzionano la PrintTables con la GetAllTablesArr. Però se voglio importare più pagine? Ho provato a cambiare il codice
Codice: Seleziona tutto
GoTo SQuit
'Seconda pagina:
myUrl = "https://www.borsaitaliana.it/borsa/cw-e-certificates/dati-mercato.html?isin=" & myIsin & "&lang=it"
Call GetAllTablesArr(myUrl, 1, 5)   'Posiziona in colonna E

con
Codice: Seleziona tutto
'GoTo SQuit
'Seconda pagina:
'myUrl = "https://www.borsaitaliana.it/borsa/cw-e-certificates/dati-mercato.html?isin=" & myIsin & "&lang=it"
myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/1x2"
Call GetAllTablesArr(myUrl, 1, 60)   'Posiziona in colonna BH

ma anzichè importarmi le quote correct score e 1X2, mi importa due volte le quote correct score. Perchè? Non capisco! :-?
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi Anthony47 » 17/02/22 19:53

A me il file Selenium_Test.xlsm richiede lo stesso tempo (+/- 0.5 sec) sia come e' in origine, sia con la gestione Application.Calculation e sia con la gestione Application.ScreenUpdating (in questo caso mi aspettavo un paio di secondi in meno, ma niente)

Usando la Sub PrintTables con gli url https://www.bmbets.com/football/italy/s ... a-5428702/ (uno a caso tra quelli disponibili) e https://www.bmbets.com/football/france/ ... 984/#!/1x2 (quello che indichi tu nel tuo ultimo msg) io importo due gruppi di tabelle diverse, una in colonna A l'altra in colonna come indicato nella Call. Insomma non vedo il problema.
Mi dici la macro completa con cui hai provato?

La Sub GetAllTablesArr e' una sub che come trucco carica tutte le tabelle del sito in una matrice, la TArr, che in ogni sua cella conterra' una matrice completa), in modo da velocizzare il successivo scarico delle tabelle sul foglio (che infatti viene fatto a blocchi, una tabelle intera alla volta, non una cella alla volta). Non e' legata all'uso di Selenium.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 18/02/22 00:14

La macro PrintTables che sto provando
Codice: Seleziona tutto
Dim WPage As Object


Sub PrintTables()

Start = Time
'Application.Calculation = xlManual


Dim myIsin As String, myUrl As String
'
'Crea Driver:
If WPage Is Nothing Then
'    Set WPage = CreateObject("Selenium.EdgeDriver")
    Set WPage = CreateObject("Selenium.CHRomedriver")
End If
Sheets("AllTables").Select
Range("A:DK").ClearContents
'
''myIsin = "CH0508208748"
myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/correct-score"
'
'Prima pagina:
'WPage.Start "edge"
WPage.Start "chrome"
Call GetAllTablesArr(myUrl)         'Posiziona in colonna A
'
'GoTo SQuit
'Seconda pagina:
'myUrl = "https://www.borsaitaliana.it/borsa/cw-e-certificates/dati-mercato.html?isin=" & myIsin & "&lang=it"
myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/1x2"
Call GetAllTablesArr(myUrl, 1, 60)   'Posiziona in colonna BH
'
SQuit:
'Quit Selenium
WPage.Quit
Set WPage = Nothing
MsgBox ("Informazioni raccolte...")
   ' Application.Calculation = xlAutomatic

MsgBox "Tempo: " & Format(Time - Start, "hh:mm:ss")

End Sub


Sub GetAllTablesArr(myUrl As String, Optional rNum0 As Long = 1, Optional cNum0 As Long = 1)
Dim TBColl As Object
Dim I As Long, J As Long, myTim As Single
Dim RNum As Long, CNum As Long
   
Dim TArr

If WPage Is Nothing Then
    Set WPage = CreateObject("Selenium.EdgeDriver")
End If
WPage.Get myUrl
'
myTim = Timer
'
Set TBColl = WPage.FindElementsByTag("table")
RNum = rNum0: CNum = cNum0
'
For I = 1 To TBColl.Count               'Scan delle Tabelle presenti
    TArr = TBColl(I).AsTable.Data
    RNum = RNum + 1
    Cells(RNum, CNum).Value = "## Table " & I
    If (UBound(TArr) * UBound(TArr, 2)) > 0 Then
        Cells(RNum + 1, CNum).Resize(UBound(TArr), UBound(TArr, 2)).Value = TArr
    End If
    RNum = RNum + UBound(TArr) + 1
    DoEvents
Next I
Debug.Print "FINE", RNum, Format(Timer - myTim, "0.00"), myUrl
End Sub

Mi importa due volte la pagina correctscore. Non la correctscore e la 1X2

La macro caller invece è questa
Codice: Seleziona tutto
Dim WPage As Object

Sub Caller()
Dim myIsin As String, myUrl As String, LastA As Long, I As Long, Last1 As Long
Dim AllTabs, J As Long, K As Long, L As Long, myHead As String, P As Long
'
'Crea Driver:
If WPage Is Nothing Then
    'Set WPage = CreateObject("Selenium.EdgeDriver")
    'WPage.Start "edge"
   
        Set WPage = CreateObject("Selenium.chromedriver")    'Per Chrome
    WPage.Start "chrome"
End If
Sheets("dataColl").Select
'
LastA = Cells(Rows.Count, "A").End(xlUp).Row            'Quanti Isin?
Last1 = Cells(1, Columns.Count).End(xlToLeft).Column    'Quante colonne?
'
Range("B2").Resize(LastA + 10, Last1 + 5).ClearContents
For P = 1 To 2                                      'Cerca su ambedue le pagine web
    For I = 2 To LastA                              ' per ogni Isin
        myIsin = Cells(I, 1)
        If P = 1 Then
            'myUrl = "https://www.borsaitaliana.it/borsa/cw-e-certificates/scheda/" & myIsin & ".html?lang=it"""
       ' myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/correct-score"
        myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/" & myIsin
        Else
            'myUrl = "https://www.borsaitaliana.it/borsa/cw-e-certificates/dati-mercato.html?isin=" & myIsin & "&lang=it"
        'myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/1x2"
        myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/" & myIsin
        End If
        AllTabs = GimmeTablesArr(WPage, myUrl)      'Ottieni la matrice delle tabelle
        For J = 2 To Last1                          'Cerca l'intestazione di ogni colonna...
            myHead = Cells(1, J).Value
            For K = 1 To UBound(AllTabs)            '... in tutte le tabelle della pagina...
                For L = 1 To UBound(AllTabs(K))     '.... in tutte le righe di ogni tabella
                    'Se "Trovato" allora scrivi il valore:
                    If InStr(1, AllTabs(K)(L, 1), myHead, vbTextCompare) = 1 Then
                        If Cells(I, J) = "" Then Cells(I, J) = AllTabs(K)(L, 2)
                    End If
                Next L
            Next K
        Next J
    Next I
Next P
'
'Quit Selenium
WPage.Quit
Set WPage = Nothing
MsgBox ("Informazioni raccolte...")
End Sub



Function GimmeTablesArr(lDriver As Object, myUrl As String) As Variant
'Dim PColl As WebElements, myItm As Object, TBColl As Object, pCount As Long
Dim I As Long, myTim As Single
'Dim RNum As Long, CNum As Long, TdtD As Object, TrtR As Object
Dim TArr()
'
lDriver.Get myUrl
myTim = Timer
'
Set TBColl = lDriver.FindElementsByTag("table")
ReDim TArr(1 To TBColl.Count)
'
For I = 1 To TBColl.Count
    TArr(I) = TBColl(I).AsTable.Data
Next I
GimmeTablesArr = TArr
Debug.Print "GTArr:", "Tables: " & I - 1, Format(Timer - myTim, "0.00"), myUrl
End Function


Non mi importa niente, perchè mi pare di capire che ci deve essere qualche info nel foglio. Tipo il codice myIsin, che è la parte variabile dell'indirizzo web (giusto?). L'ho messo in A2 e A3 (rispettivamente correct-score e 1x2). Poi? Che altro ci vuole?

Ho riprovato il file il file Selenium_Test.xlsm e ora anche a me da lo stesso tempo di esecuzione con o senza quei codici. Non so perchè allora la scorsa volta erano nettamente differenti.
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi Anthony47 » 18/02/22 10:21

Hummm... Sembra che Selenium vada in crisi quando il secondo url abbia la stessa "radice" del precedente.
Senza cercare una soluzione "di fino" chiudiamo e riapriamo il driver prima di interrogare il secondo url:
Codice: Seleziona tutto
' altre istruzioni
myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/correct-score"
'
'Prima pagina:
WPage.Start "chrome"
Call GetAllTablesArr(myUrl)         'Posiziona in colonna A
'
''GoTo SQuit
'Seconda pagina:
WPage.Quit
WPage.Start "chrome"
myUrl = "https://www.bmbets.com/football/france/ligue-1/lille-v-metz-5425984/#!/1x2"
Call GetAllTablesArr(myUrl, 1,  60)   'Posiziona in colonna BH
'
SQuit:
'Quit Selenium
'etc


La Sub Caller e' relativa al problema di Gianca532011 (popolare una tbella di dati di borsa).
Non escludo che possa servire "pari pari" a te, ma devi creare una tabella con gli url da cercare e le intestazioni dei valori da importare, come fatto nel foglio DataColl del file che allegai nella discussione di Gianca532011 (vedi viewtopic.php?f=26&t=112311#p660074)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 18/02/22 11:54

Si. Hai ragione. Mettendo in mezzo un terzo indirizzo web di un sito diverso dagli altri due, funziona anche la macro di prima.
Oppure si chiude e si riapre. Funziona lo stesso.

Grazie di tutto! Per me va bene già così. ;)
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi aggittoriu » 19/02/22 12:18

No. Ho ancora un piccolo problema. :(
Nel file che utilizzo io, mi esce questo errore
Immagine

Ho ripulito il file da tutto il contorno, formule, altre macro, ecc. per allegarlo qui https://bafybeiag4xpywpwtf4b3sqgvdanh6jlznydo4ifv3ggr4rqkr3chbrygvy.ipfs.dweb.link/Interpreta - Copia.xlsm
ma questo file non mi da nessun errore.

Dov'è il problema allora? :(

P.s. il codice
Codice: Seleziona tutto
myUrl = "http://www.inf.uniroma3.it/~patrigna/didactic/imp_elab/esempi_html/esempio_5.html"
Call GetImpQ(myUrl, 1, 1) 'Posiziona in colonna A

non serve a niente, ma lo uso solo per evitare che mi importi sempre la stessa pagina.
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi Anthony47 » 19/02/22 18:54

Perdona, se vuoi creare nuove macro partendo da quanto pubblicato non c'e' problema; ma se mi cambi solo il nome delle macro allora perdo tempo solo a controllare quali sono le modifiche rispetto a quanto avevo pubblicato io...

Comunque credo che quelle pagine abbiano seri problemi di attesa, e dal messaggio che pubblichi mi pare che talvolta questa attesa porta il driver a segnalare un errore di timeout.
So che ci sono varie tecniche per la gestione dell'attesa, ma non sono ancora pronto (come competenza su Selenium) per usare qualcosa che non sia il metodo di default, con i suoi limiti

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 19/02/22 22:26

Si. Ma io non volevo un’altra macro. Quella me l’hai già data. E quella uso. ;)
Io volevo capire da cosa dipendeva quell’errore. E in particolare se era da imputare al mio pc o ad altro.
Il bello è che quel file non volevo neanche pubblicarlo. Poi ho pensato… se non lo faccio, mi cazzia perchè… senza vedere niente, come fa a capire dov’è il problema? :oops: :D

Comunque, mi pare di capire che tra il mio pc che va leeeeento e quel sito che si carica leeeeeeeentamente… c’è da aspettare e da sperare che non si blocchi sul più bello. :mmmh:

Vabbè! Vedremo di portare pazienza!

Ciao. Stavolta chiudo davvero! (Credo :D )
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi nignetto » 24/02/22 15:15

Scusa se mi intrometto. Se ti interessa un file per scaricare incontri..quote e statistiche si chiama "senatore"...se li vuoi ti posso linkare indirizzo..ciao
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Importare tabelle da web

Postdi aggittoriu » 24/02/22 16:31

nignetto, cioè? Di cosa parli? Devo vedere per sapere se mi interessa.

Anthony47, un'altra cosa. :oops: Però tranquillo! Sarò rapido e indolore. :)
Ho appena visto che su firefox si può premere ALT e andare su Visualizza --> Stile pagina --> Nessuno stile. E la pagina diventa molto più leggera.
Mi chiedevo quindi se si può fare la stessa cosa, con la macro che mi hai dato. Ossia, anzichè aprire una pagina web completa tramite selenium, aprire una pagina web priva di stili (e tutto quello che si può togliere tranne ovviamente il testo). Probabilmente sarebbe tutto molto più veloce e stabile. (Credo).
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi Anthony47 » 25/02/22 01:59

Purtroppo Firefox non si interfaccia con Selenium, si potrebbe solo manovrare "alla cieca"

Ad esempio con questo codice apre il link nel browser di default (DEVI averlo impostato Firefox), poi prova a cambiare lo stile, poi aspetta 5 sec, copia la pagina che trova, sposta nella clipboard di Office e prova a incollare in Foglio3:
Codice: Seleziona tutto
#If VBA7 Then
   Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal Hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
   Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal Hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If


Sub ApriInBrowser()
Dim myUrl As String, iID
Dim myData As DataObject
Dim myClip As String
'
Sheets("Foglio3").Range("A:H").Clear
myUrl = "https://www.bmbets.com/football/austria/bundesliga/scr-altach-v-fc-trenkwalder-admira-5449731/"
'
iID = ShellExecute(vbNull, "Open", myUrl, "", "", vbMaximizedFocus)
Sleep 2000
'Imposta Nessuno stile
SendKeys "%v"
Sleep 300
SendKeys "a"
Sleep 300
SendKeys "{ENTER}", True
Sleep 300
SendKeys "n"
Sleep 5000          'aspetta alla cieca
'Seleziona tutto..
SendKeys "^a"
Sleep 300
'.. e copia
SendKeys "^c"
Sleep 1000
'Da Windows a Office:
On Error Resume Next
Set myData = New DataObject
    'text da clipboard
    myData.GetFromClipboard
    myClip = ""
    myClip = myData.GetText
mysplit = Split(Replace(myClip & Chr(10), Chr(9), "  ", , , vbTextCompare), Chr(10), , vbTextCompare)
Debug.Print Len(myClip), UBound(mysplit)
'Incolla su Foglio:
Sheets("Foglio3").Range("A1").Resize(UBound(mysplit), 1).Value = Application.WorksheetFunction.Transpose(mysplit)
On Error GoTo 0
Sleep 1000
'Chiudi la scheda Firefox
SendKeys "^w"
Beep
End Sub

Va messo tutto in un modulo vba standard inizialmente vuoto; devi inoltre impostare il riferimento alla libreria Microsoft Forms 2.0 Object Library: Menu /Strumenti /Riferimenti; scorri l'elenco fino alla voce suddetta, la spunti, confermi con Ok

Poi partendo da Excel lanci la Sub ApriInBrowser: usa il comando Alt-F8 per selezionare la macro e avviarla, e non toccare niente fino al Beep

Poi vai su Foglio3 e vedi che cosa ci trovi e che cosa puoi farne.

Sia chiaro che la macro lavora alla cieca, lanciando i vari comandi "sperando" di essere sulla buona strada; e comunque spesso impiega molti secondi per aprirsi e talvolta piu' dei quasi 9 sec che alla fine aspetto prima di provare a "Copiare" il contenuto; e comunque non so se la tabella con le quote e' facilmente incrociabile con le intestazioni.

Insomma temo che sia un semplice esercizio

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 25/02/22 10:31

Ok. Grazie Anthony47. Me lo guardo con calma domani o dopo, perchè ho un po' da fare e sembra una cosa complicata. Inoltre devo anche installare nuovamente Selenium, perchè ho fatto il ripristino di sistema e me l'ha disinstallato.

Poi ti faccio sapere.
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi Anthony47 » 26/02/22 13:17

Questa versione dovrebbe essere piu' affidabile della precedente, perche' aspetta fintanto che la pagina non presenta almeno 2000 crt (le pagine in esame ne hanno 30-40 mila), fino a max di circa 30 sec
Codice: Seleziona tutto
Sub ApriInBrowser2()
Dim myUrl As String, iID
Dim myData As DataObject
Dim myClip As String
'
Sheets("Foglio3").Range("A:H").Clear
myUrl = "https://www.bmbets.com/football/austria/bundesliga/scr-altach-v-fc-trenkwalder-admira-5449731/"
myUrl = "https://www.google.com"
'
Debug.Print Format(Now, "hh:mm:ss")
iID = ShellExecute(vbNull, "Open", myUrl, "", "", vbMaximizedFocus)
Sleep 2000
'Imposta Nessuno stile
SendKeys "%v"
Sleep 100
SendKeys "a"
Sleep 100
SendKeys "{ENTER}", True
Sleep 100
SendKeys "n"
For i = 1 To 20
    Sleep 1000          'aspetta alla cieca
    'Seleziona tutto..
    SendKeys "^a"
    Sleep 100
    '.. e copia
    SendKeys "^c"
    Sleep 300
    'Da Windows a Office:
    On Error Resume Next
    Set myData = New DataObject
        'text da clipboard
        myData.GetFromClipboard
        myClip = ""
        myClip = myData.GetText
    If Len(myClip) > 2000 Then Exit For
Next i
Sleep 1000
mysplit = Split(Replace(myClip & Chr(10), Chr(9), "  ", , , vbTextCompare), Chr(10), , vbTextCompare)
Debug.Print Len(myClip), UBound(mysplit), "I=" & i, Format(Now, "hh:mm:ss")
'Incolla su Foglio:
Sheets("Foglio3").Range("A1").Resize(UBound(mysplit), 1).Value = Application.WorksheetFunction.Transpose(mysplit)
On Error GoTo 0
Sleep 1000
'Chiudi la scheda Firefox
SendKeys "^w"
Beep
End Sub

Sostituisce la precedente Sub ApriInBrowser(), le dichiarazioni iniziali restano confermate, come pure le istruzioni di uso e il funzionamento praticamente "alla cieca"

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 26/02/22 16:04

Ok Anthony. Rispondo al volo solo per dirti che ho visto e che non sono sparito.
In questi giorni però mi devo stressare al pc con altro. Quindi mi guarderò il tuo suggerimento fra qualche giorno, con calma. Perchè ho bisogno di tempo per cercare di capirci almeno quel minimo necessario. :oops:
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi aggittoriu » 27/02/22 19:41

Ciao. Rieccomi qua. :)
Allora... ho provato l'ultima macro che mi hai dato. L'ho trovata molto interessante. ;) Ma purtroppo non funziona sempre. :( Però a volte funziona. :) Quindi potrei comunque lanciarla, dire a excel di controllare se ha funzionato e se si, lanciarla per la prossima partita, mentre se no, lanciarla per la stessa partita. Non dovrebbe essere un problema quello. ;) (A parte la perdita di tempo :( ).

Ci son cose che devo chiederti però. :oops:
Il codice
Codice: Seleziona tutto
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal Hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
mi viene colorato in rosso. Che vuol dire? c'è qualche errore?

Questo
Codice: Seleziona tutto
myUrl = "https://www.google.com"
l'ho cancellato. Altrimenti non funziona niente. Presumo che quell'apostrofo più sotto fosse per lui, giusto?

Pure questo codice ho cancellato.
Codice: Seleziona tutto
'Imposta Nessuno stile
SendKeys "%v"
Sleep 100
Primo e soprattutto, perchè quando funziona, non mi importa ciò che mi serve (le quote).
Secondo perchè non mi apre la pagina direttamente senza stile. Me la apre normale, poi toglie lo stile. Io la volevo senza stile, proprio per evitare di aprirmi la pagina normale ed essere quindi più veloce da caricare. E invece no. Così si allungano i tempi e non mi da ciò che chiedo.
Comunque nelle prove che ho fatto fino ad ora, la pagina normale non ci ha mai messo molto ad aprirsi. Quindi mi tengo la pagina normale. ;)
Insomma, la fregatura è che non c'è un'istruzione che dica ad excel di aspettare che la pagina sia completamente aperta e solo dopo, passare all'istruzione successiva. Giusto? Stesso problema che avevo qualche anno fa, quando usavo AutoMouseClicker. :mmmh:

Comunque dai. Sembra promettente. E forse riuscirò ad usarla. ;)

Te l'ho già detto grazie! :D :oops:
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

Re: Importare tabelle da web

Postdi Anthony47 » 27/02/22 23:28

Il codice in rosso indica che non hai VBA versione 7: o hai windows 32 bit oppure una versione poco recente di Office (mi pare che vba7 sia stato introdotto con Office 2010), ma non ti deve preoccupare.

Hai fatto bene a togliere myUrl=Google.com; faceva parte delle prove.

Come detto, la macro spara comandi alla cieca; l'ultima modifica serve solo per attendere fintanto che non vengono restituiti almeno 2000 caratteri, dando per scontato che in questo caso allora nel secondo successivo saranno pronti tutti i dati di quelle pagine (invece che aspettare alla cieca mooolti secondi). Quindi e' un miracolo se talvolta restituisce i dati giusti :D :D

la fregatura è che non c'è un'istruzione che dica ad excel di aspettare che la pagina sia completamente aperta
Per interagire con le pagine web serve una interfaccia; es Selenium (per Edge o Chrome) o quella nativa di Microsoft che interagisce con I.E.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare tabelle da web

Postdi aggittoriu » 28/02/22 12:16

No, non l'ho mica capita la storia del miracolo. :oops: Però non ti faccio perdere tempo a spiegare, perchè tanto non ci capirò niente comunque. :mmmh:

Solo altre duo o tre cosette.
La macro si ferma su firefox. Che istruzione devo aggiungere per tornare su excel alla fine?

Poi, quando le quote ci sono, me le mette tutte concatenate in un'unica cella. Non è importantissimo. Ma se si potessero avere ognuna in una singola cella, sarebbe meglio. Si può?

Più importante sarebbe poter continuare ad usare il pc per fare altro, quando la macro è in esecuzione. Ma temo che questo non si possa fare, giusto? :(

Poi ho aggiunto un ",true" per ogni istruzione SendKeys, perchè mi sembrava cosa buona e giusta. Per capirci, così
Codice: Seleziona tutto
SendKeys "a,true"

Mi sembra che vada meglio. Nel senso, che mi sembra di notare un maggior numero di successi. Ma in reatà, non ho ben capito se possa servire realmente (e se in tutte le SendKeys o solo in qualcuna) o se i maggior numero di successi siano solo frutto del caso fortuito. Secondo te?
aggittoriu
Utente Senior
 
Post: 161
Iscritto il: 24/06/14 08:49

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Importare tabelle da web":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti