Ciao Anthony47 grazie per la tua disponiltà.
Il mio lavoro consiste in questo: devo prelevare dei dati da un sito internet, questi dati vengono elaborati direttamente in VBA una prima volta ed esportati su un foglio excel. A questo punto viene avviata una macro esterna che copia e incolla i datti su un secondo software per una seconda elaborazione.
Il problema è che il sito prevede un login e avendo diversi account devo loggarmi e sloggarmi ad ogni ciclo (il ciclo è: prelevare dati dal sito, prima elaborazione in VBA e esportazione dei dati in excel, avvio macro esterna per caricare i dati sul secondo software per la seconda elaborazione).
Sono riuscito a fare tutto questo, quindi ad ogni ciclo mi loggo e poi mi disconnetto (la macro si ripete all'infinito). Per evitare di fare questo ho pensato di usare diversi browser, quindi ad ogni browser corrisponde un account che rimane connesso (evito in questo modo la fase di autenticazione che purtroppo a volte da dei problemi).
Adesso ho un problema: in modo casuale Vba mi da "l'errore di run-time '91. Variabile oggetto o variabile del blocco With non impostata" e questo avviene quando IE non riesce a caricare la pagina e infatti su Internet explorer ho l'errore "impossibile visualizzare la pagina Web". Tendo a precisare che la connessione funziona benissmo, infatti se apro un'altra pagina web non ho nessun problema.
La parte iniziale del codice è:
- Codice: Seleziona tutto
...
' Cancella IE cronologia
Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255"
'Attesa 3 Secondi
myStart = Timer
Do
DoEvents
If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop
'loop infinito
Do
I = 0
'verifica di essere log off
myURL = "link..."
Set IE = CreateObject("InternetExplorer.Application")
With IE
.navigate myURL
.Visible = True
Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop
End With
'Attesa 5 Secondi
myStart = Timer
Do
DoEvents
If Timer > myStart + 5 Or Timer < myStart Then Exit Do
Loop
'Ciusura IE
IE.Quit
Set IE = Nothing
'log IN
myURL = "link..."
Set IE = CreateObject("InternetExplorer.Application")
With IE
.navigate myURL
.Visible = True
Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop
End With
myStart = Timer
Do
DoEvents
If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop
IE.Document.forms(0).all("username").Value = "username"
IE.Document.forms(0).all("password").Value = "password"
IE.Document.forms(0).submit
' attesa 20 secondi per essere sicuri che il log in si avvenuto
myStart = Timer
Do
DoEvents
If Timer > myStart + 20 Or Timer < myStart Then Exit Do
Loop
'inizio programma
myURL = "link..."
Set IE = CreateObject("InternetExplorer.Application")
Sheets("Foglio1").Select
Range("A:B").Clear
With IE
.navigate myURL
.Visible = True
Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop
End With
myStart = Timer
Do
DoEvents
If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop
'cerca ed elenca Id e Descrizioni
Set myColl = IE.Document.getElementsByTagName("a")
For Each myLink In myColl
LLin = myLink.href
...
Cercando su internet ho trovato questa verifica che serve per essere sicuri che la pagina internet è stata caricata. Non Ho capito come usarla. A me serve che la macro non vada in errore altrimenti mi blocca il loop.
- Codice: Seleziona tutto
On Error Resume Next
WebBrowser1.Navigate "about:blank"
DoEvents
Do
Err.Clear
WebBrowser1.Document.body.innerhtml = "Attendi..."
If Err.Number = 0 Then Exit Do
DoEvents
Loop
On Error GoTo 0
' ora puoi navigare dove vuoi
WebBrowser1.Navigate "http://www.ilmiosito.com"
Grazie e spero di essere stato chiaro.