Ok, quindi siamo nell' ambito di una automazione ottenuta tramite CreateObject("InternetExplorer.Application")...
Non credo che basti cambiare il focus per cambiare il target di una automazione; quindi se il pop up e' costituita da una finestra InternetExplorer dovresti associare l' oggetto che la tua automazione indirizza alla nuova finestra.
Partendo da quanto avevamo fatto in altra circostanza (vedi
viewtopic.php?t=97997) dobbiamo maggiormente articolare quel codice per agganciare con sicurezza la finestra giusta all' oggetto.
Supponiamo che l' automazione sia sull' oggetto IE, allora dopo l' esecuzione del javascript che apre la finestra dovresti usare qualcosa come
- Codice: Seleziona tutto
Sub GetIE_WindowEnh()
'Aggancia una sessione IE gia' aperta
Dim IE As Object
Dim objWin As Object, aaa
Dim CUrl
Dim myURL2
myURL2 = "http://www.popuptest.com/popup10.html" ' <<< Esempio
On Error Resume Next
For Each objWin In CreateObject("Shell.Application").Windows
With objWin
aaa = .Name
If aaa = "Windows Internet Explorer" Then
CUrl = objWin.LocationURL
If CUrl = myURL2 Then
objWin.Visible = True
Set IE = objWin
Exit For
End If
End If
End With
Next objWin
On Error GoTo 0
If IE Is Nothing Then 'Se manca, allora...
Set IE = CreateObject("InternetExplorer.Application")
' IE.Visible = True
End If
'etc etc; esempio:
With IE
.Visible = True
.navigate "http://www.pc-facile.com/forum/viewtopic.php?f=26&t=97997"
' etc etc
'etc etc
End With
'etc etc
'
End Sub
In myURL2 ho inserito l' url di una finestra di popup presente sul mio schermo che volevo agganciare alla mia automazione; nel loop successivo ho scandito le varie applicazioni restituite dall' oggetto Shell.Application; di quelle che si qualificavano come " Windows Internet Explorer" ne verifico il proprio LocationURL e se corrisponde al nostro target allora aggancio quell' oggetto all' oggetto IE.
Il codice successivo e' solo per prova, mi serviva ad esempio per dimostrare che la nuova navigazione avveniva nella finestra ex-popup.
Cercando di adattare questo codice alla tua macro ho inserito gran parte di esso in coda, dopo il link.Click, come segue:
- Codice: Seleziona tutto
'ESISTENTE:
If link.innertext = "Try it yourself »" Then
link.Click
Exit For
End If
Next link
Do While ie.Busy
DoEvents
Loop
End With
'==============Fine esistente; inizio AGGIUNTO
Dim objWin As Object, aaa
Dim CUrl
Dim myURL2
myURL2 = "http://www.w3schools.com/html/tryit.asp?filename=tryhtml_script" ' <<<
On Error Resume Next
For Each objWin In CreateObject("Shell.Application").Windows
With objWin
aaa = .Name
If aaa = "Windows Internet Explorer" Then
CUrl = objWin.LocationURL
If CUrl = myURL2 Then
objWin.Visible = True
Set ie = objWin
Exit For
End If
End If
End With
Next objWin
On Error GoTo 0
If ie Is Nothing Then 'Se manca, allora...
Set ie = CreateObject("InternetExplorer.Application")
' IE.Visible = True
End If
[G1] = ie.document.body.innerHTML
'a = iePopup
End Sub
In questo modo ha agganciato la finestra InternetExplorer aperta dal popup (identificabile dall' url che ho copiato in myURL2) all' oggetto IE, leggendone cosi' il body.innerHtml in cella G1.
Ovviamente avendo accesso al nuovo "document" si possono fare automazioni piu' sensate.
Necessita del riferimento alla libreria Microsoft Internet Controls, come d' altra parte anche l' Event NewWindow2.
In quanto alla gestione di NewWindow2 (che secondo me non ci avrebbe portato da nessuna parte), credo che andrebbe gestito come avevamo cercato di fare con Ie_DocumentComplete qui:
viewtopic.php?p=546105#p559131Ciao