Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RE: copiare elementi di una pagina web in cella excel

1,304 views
Skip to first unread message

r

unread,
Mar 13, 2009, 9:09:01 AM3/13/09
to

"luigimut" ha scritto:

> Ho bisogno di aiuto per creare una macro in VBA che effettui quanto segue:
> copiare degli elementi all'interno di una pagina web in alcune celle di un
> foglio excel.
> Credo si debba usare la libreria HTML in VBA ma non so che sintassi vada
> usata.
>
> Per completezza aggiungo il testo HTML della pagina web che contiene il
> testo da copiare:
>
>
> <!--DWLayoutTable--> <tr> <td width="100"><P align="left" >Premium
> percentage</p></td> <td width="3"><P align="left" >:</p></td> <td
> width="478"><P align="left" >2,68 %</p></td> </tr> <tr> <td width="100"><P
> align="left" >Premium amount</p></td> <td width="3"><P align="left"
> >:</p></td> <td width="478"><P align="left" >€ 2.680</p></td> </tr> <tr> <td
> width="478" colspan="3"><P align="left" > </p></td> </tr> <tr> <td
> width="478" colspan="3"><P align="left" >
>
> In particolare i due dati da individuare e copiare in due rispettive celle
> di excel sono i valori di Premium percentage (pari a 2.68 %) e del Premium
> amount ( euro 2680).
>
> Qualcuno mi sa dare una mano e segnalarmi letteratura al riguardo
>
> grazie
>
> luigimut
>

dal codice che hai inviato non si tira fuori molto ...
puoi fare comunque in due modi:
1 creare una query web vedo che i dati sono
in una tabella (hai già provato?) coi rischi già citati
in una domanda simile
http://www.microsoft.com/office/community/it-it/default.mspx?&lang=it&cr=IT&guid=&sloc=it-it&dg=microsoft.public.it.office.excel&p=1&tid=8b9a81ae-6f46-48a1-a433-4a8d5165354a

2 quello che farei io leggere la pagina e recuperare
i dati con una funzione che ricerchi le stringhe che desideri
in questo caso io ho usato proficuamente le espressioni
regolari

alcuni miei esempi li trovi qui:
http://excelvba.altervista.org/blog/index.php/Table/Excel-VBA/

se poi posti l'indirizzo della pagina o l'html completo
si può vedere di adattare ...

saluti
r

luigimut

unread,
Mar 13, 2009, 9:42:12 AM3/13/09
to
Grazie per la risposta quasi immediata.
Forse pero' non sono stato chiaro su cosa ho bisogno.

In pratica, quello che desidererei autatizzare e': 1) l'apertura di una
pagina web contenente una form, 2) inserimento via VBA di alcuni parametri
della form e l'attivazione di un calcolo 3) al termine del calcolo la form
contiene dei valori (immagino sempre nello stesso posto della form. Si tratta
del premium percentage e premium amount citati nel precedente messaggio, 4) a
questo punto, e' la cosa che ho chiesto, voglio prendere i valori del premium
percentage e amount e caricarli in due celle del foglio excel

Se vuoi farti un'idea della form si trova all'indirizzo:

http://www.atradius.com/PremiumCalculator?lc=en&page=/nl/en/dutchstatebusiness/calculator/forms/financieringsrisico.jsp

Riguardo ai tuoi suggerimenti: il primo non ho capito come possa fare una
web query inserendo i valori da essa. Il secondo non ho capito come usare il
codice proposto nel tuo sito per ottenere il risultato.

grazie

luigimut

luigimut

unread,
Mar 13, 2009, 11:08:15 AM3/13/09
to
ciao r

il mio problema non e' alimentare via VBA il form. Per quello sono riuscito
a farlo. Il problema e', una volta fatta la submit della form e ottenuto il
risultato sulla form stessa (un certo premium percentage e premium amount)
vorrei prelevare questi valori dal risultato e metterli in due celle del mio
foglio excel ( e questo non lo so fare via vba). Se vuoi fare una prova puoi
tranquillamente inserire una serie di parametri che la form accetti e poi
provare a trasferire il risultato su excel

grazie

luigimut

"r" wrote:

>
> "luigimut" ha scritto:
>

> > Grazie per la risposta quasi immediata.
> > Forse pero' non sono stato chiaro su cosa ho bisogno.
> >
> > In pratica, quello che desidererei autatizzare e': 1) l'apertura di una
> > pagina web contenente una form, 2) inserimento via VBA di alcuni parametri
> > della form e l'attivazione di un calcolo 3) al termine del calcolo la form
> > contiene dei valori (immagino sempre nello stesso posto della form. Si tratta
> > del premium percentage e premium amount citati nel precedente messaggio, 4) a
> > questo punto, e' la cosa che ho chiesto, voglio prendere i valori del premium
> > percentage e amount e caricarli in due celle del foglio excel
> >
> > Se vuoi farti un'idea della form si trova all'indirizzo:
> >
> > http://www.atradius.com/PremiumCalculator?lc=en&page=/nl/en/dutchstatebusiness/calculator/forms/financieringsrisico.jsp
>

> ok dimmi che valori devi passare in quale campi a titolo di esempio qualcosa
> che sia realistico
>
> saluti
> r

r

unread,
Mar 13, 2009, 12:28:13 PM3/13/09
to
"luigimut" ha scritto:

> ciao r
>
> il mio problema non e' alimentare via VBA il form. Per quello sono riuscito
> a farlo. Il problema e', una volta fatta la submit della form e ottenuto il
> risultato sulla form stessa (un certo premium percentage e premium amount)
> vorrei prelevare questi valori dal risultato e metterli in due celle del mio
> foglio excel ( e questo non lo so fare via vba). Se vuoi fare una prova puoi
> tranquillamente inserire una serie di parametri che la form accetti e poi
> provare a trasferire il risultato su excel
>

sto perdendo già troppo tempo!
1 mostra il tuo codice ... se no poi mi dici che non riesci a unirli
2 se ti chiedo dei parametri realistici è perchè non ho voglia di mettermi a
provare a vedere come compilare la form e cercare parametri che vengano
accettati
3 questa sotto a me funziona se hai problemi di qui al punto 1 ti arrangi

Sub test()
Dim myIE As Object
Dim s As String
Dim myURL As String
Set myIE = CreateObject("InternetExplorer.Application")

myURL = _
"http://www.atradius.com/PremiumCalculator?lc=en&page=/nl/en/dutchstatebusiness/calculator/forms/financieringsrisico.jsp"

myIE.navigate myURL
Do While myIE.Busy Or _
myIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
myIE.Visible = True

'qua io ho inserito i dati manualmente
'visto che sai già come fare!

s = Recupera_Dato1(myIE)
Debug.Print s
End Sub

Function Recupera_Dato1( _
myIE As Object) As String

Dim M
Dim s As String
Dim RE As Object

s = myIE.document. _
body. _
innerText

Set RE = CreateObject("VBScript.RegExp")
RE.Global = True
RE.Pattern = "(Premium percentage:)" & _
"(\s?[\d,]+\s%)"

If RE.test(s) Then
Set M = RE.Execute(s)
Recupera_Dato1 = _
RE.Replace(M(0), "$2")
End If
RE.Pattern = "(Premium amount\11?:\s?\S?\s?)([\d.]+)"
If RE.test(s) Then
Set M = RE.Execute(s)
Recupera_Dato1 = Recupera_Dato1 & ";" & _
RE.Replace(M(0), "$2")
End If

End Function

saluti
r

r

unread,
Mar 13, 2009, 12:39:01 PM3/13/09
to
così se vuoi i dati direttamente in 2 celle nell'esempio la cella a1 e a2


Sub test()
Dim myIE As Object

Dim s() As String


Dim myURL As String
Set myIE = CreateObject("InternetExplorer.Application")

myIE.navigate myURL
Do While myIE.Busy Or _
myIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
myIE.Visible = True
'qua io ho inserito i dati manualmente
'visto che sai già come fare!
s = Recupera_Dato1(myIE)

[a1] = s(0)
[a2] = s(1)
End Sub

Function Recupera_Dato1( _
myIE As Object) As String()

Dim M
Dim s As String

Dim sArr(1) As String
Dim RE As Object

s = myIE.document. _
body. _
innerText

Set RE = CreateObject("VBScript.RegExp")
RE.Global = True
RE.Pattern = "(Premium percentage:)" & _

"(\s?[\d,]+)"

If RE.test(s) Then
Set M = RE.Execute(s)

sArr(0) = _


RE.Replace(M(0), "$2")
End If
RE.Pattern = "(Premium amount\11?:\s?\S?\s?)([\d.]+)"
If RE.test(s) Then
Set M = RE.Execute(s)

sArr(1) = _


RE.Replace(M(0), "$2")
End If

Recupera_Dato1 = sArr
End Function

saluti
r

luigimut

unread,
Mar 16, 2009, 11:09:01 AM3/16/09
to
Lo so che a questo punto ti arrabbierai ma non sono riuscito a mettere
insieme il tuo codice con il mio, o meglio, li ho messi insieme, la macro
procede fino alla fine ma alla cella a1 e a2 non compare alcunche' (e non so
perche').

Proverei allora a chiederti quanto segue:

1) ti do la nupla di parametri con i quali effettuare la simulazione. Se mi
fai vedere il codice completo posso provare a riprodurlo e a vedere se
funziona.


Principal amount (in euro’s) 1000000
Status buyer/guarantor Good bank
Country buyer/guarantor Afghanistan
Pre-finance period 6
Currency EURO
Exchange rate 1
Repayment schedule linear
Grace period 0
Periodicity 6
Number of instalments 6

2) vorrei capire qualcosa di piu' del codice della funzione che hai
costruito. Mi pare di capire che la funzione prenda il testo della pagina,
individua il punto intorno alle parole remium percentage e premium amount e
va a prendere il valore a una certa distanza da questi testi. L'oggetto e' di
VBA script? Mi fai capire meglio come funaziona? Ci sono articoli o materiali
che lo spiegano

grazie per l'aiuto

luigimut

r

unread,
Mar 16, 2009, 1:24:00 PM3/16/09
to

"luigimut" ha scritto:

non dovrei farlo ...
comunque ...
prova e fai sapere


Sub test()
CalculateF 1000000, "GB", "AFG", 6, "EUR", 1, 0, 6, 6, [a1], [a2]
End Sub

Sub CalculateF( _
Principal_amount As Long, _
Status_buyer_guarantor As String, _
Country As String, _
pre_finance_period As Long, _
sCurrency As String, _
Exchange_Rate As Long, _
Grace_period As Long, _
Periodicity As Long, _
Number_of_instalments As Long, _
rng1 As Excel.Range, _
rng2 As Excel.Range)

Dim start As Double


Dim myIE As Object
Dim s() As String
Dim myURL As String
Set myIE = CreateObject("InternetExplorer.Application")

myIE.navigate myURL
Do While myIE.Busy Or _
myIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
myIE.Visible = True

myIE.document.polis.amount.Value = Principal_amount
myIE.document.forms(0).beneficiary.Value = Status_buyer_guarantor
myIE.document.all("country").Value = Country
myIE.document.polis.Time.Value = pre_finance_period
myIE.document.all("currency").Value = sCurrency
myIE.document.all("exchangeRate").Value = Exchange_Rate
myIE.document.all("grace").Value = Grace_period
myIE.document.polis.Frequency.Value = Periodicity
myIE.document.polis.redemptions.Value = Number_of_instalments


myIE.document.polis.onsubmit

start = Timer
Do While Timer < start + 1
DoEvents
Loop


s = Recupera_Dato1(myIE)

rng1 = s(0)
rng2 = Replace(s(1), ".", ",")
myIE.Quit
End Sub


--
----------------------------------------------------------------------------------------

http://excelvba.altervista.org/blog/index.php/Table/Excel-VBA/


r

unread,
Mar 17, 2009, 12:49:01 PM3/17/09
to
qualcosa di meglio, prima mancava anche il check
Repayment_schedule che ho aggiunto ... adesso
hai tutti i 10 parametri, la pausa di 2 secondi potrebbe essere
diminuita devi provare, ed è necessaria per
consentire il refresh

fai sapere!


Sub test()
[a1] = Financing_risk_sr(1000000, "GB", "AFG", 6, "EUR", 1, 1, 0, 6, 6)
End Sub

Function Financing_risk_sr( _


Principal_amount As Long, _
Status_buyer_guarantor As String, _
Country As String, _
pre_finance_period As Long, _
sCurrency As String, _
Exchange_Rate As Long, _

Repayment_schedule As Long, _


Grace_period As Long, _
Periodicity As Long, _

Number_of_instalments As Long _
) As String

'utilizzabile anche come UDF
'non verifica i parametri
'es. Repayment_schedule può
'essere 1 o 2 linear o annuity
Dim myIE As Object
Dim docIE As Object
Dim eCh
Dim start As Single
Dim lCh As Long


Dim M
Dim s As String

Dim RE As Object

Const READYSTATE_COMPLETE As Long = 4
Const PauseTime As Long = 2
Const myURL As String = _
"http://www.atradius.com/PremiumCalculator?lc=en&page=" & _
"/nl/en/dutchstatebusiness/calculator/forms/financieri" & _
"ngsrisico.jsp"

Set myIE = CreateObject("InternetExplorer.Application")

myIE.navigate myURL
'myIE.Visible = True

Do While myIE.Busy Or _
myIE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

Set docIE = myIE.Document
With docIE
For Each eCh In .forms(0).elements
If eCh.Type = "radio" Then
If eCh.Checked = True Then
lCh = eCh.Value
Exit For
End If
End If
Next
If Repayment_schedule = lCh Then
Else
For Each eCh In .forms(0).elements
If eCh.Type = "radio" Then
If eCh.Checked = False Then
eCh.Click
Exit For
End If
End If
Next
End If
.forms(0).beneficiary.Value = Status_buyer_guarantor
.all("country").Value = Country
.all("currency").Value = sCurrency
.all("exchangeRate").Value = Exchange_Rate
.all("grace").Value = Grace_period
With .polis
.amount.Value = Principal_amount
.Time.Value = pre_finance_period
.Frequency.Value = Periodicity
.redemptions.Value = Number_of_instalments
.onsubmit
End With
End With

start = Timer
Do While Timer < start + PauseTime
DoEvents
Loop


s = docIE. _
body. _
innerText

Set RE = CreateObject("VBScript.RegExp")
RE.Global = True

RE.Pattern = "(Premium amount\11?:\s?\S?\s?)([\d.]+)"
If RE.test(s) Then
Set M = RE.Execute(s)

s = _


RE.Replace(M(0), "$2")
End If

Financing_risk_sr = Replace(s, ".", "")
myIE.Quit
Set myIE = Nothing
End Function

saluti
r

--
----------------------------------------------------------------------------------------

http://excelvba.altervista.org/blog/index.php/Table/Excel-VBA/


0 new messages