Condividi:        

Versioni diverse Office

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: Versioni diverse Office

Postdi Anthony47 » 13/01/25 23:01

Pero' io avevo chiesto di eliminare la riga On Error GoTo Err, che invece e' ancora presente nel file che hai pubblicato...

Comunque, dalle prove che hai fatto con Raffaele, mi pare di capire che l'ultima istruzione evidenziata (prima di "cadere" su StockQuote = CVErr(xlErrNA)) e' la .send
Se e' così allora mi pare che il problema sia il servizio WinHTTP; vai in Menu /Strumenti /Riferimenti; seleziona Microsoft WinHTTP Services, e controlla a quale dll corrisponde quel servizio: dovrebbe essere "winhttpcom.dll"; se e' una cosa diversa allora si tratta di un errore di configurazione che andrebbe sistemato
Avatar utente
Anthony47
Moderatore
 
Post: 19496
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: Versioni diverse Office

Postdi brtbrn » 14/01/25 17:03

@Raffaele
Ho fatto come hai scritto...
l'unica differenza è che adesso, nella cella A2, appare come risultato 0...
ho provato anche nel file fatto con la versione senza la riga On Error GoTo Err (come suggerito da Anthony) e l'unica differenza è che premendo F8 il cursore si ferma dopo poche righe, precisamente sulla riga dove c'è .WaitForResponse
brtbrn
Utente Junior
 
Post: 13
Iscritto il: 05/01/25 18:41

Re: Versioni diverse Office

Postdi brtbrn » 14/01/25 17:12

@Anthony
il file che ho allegato era quello contenente On Error GoTo Err... ma ho anche il file salvato senza questa istruzione, e come scritto nel msg precedente, ho fatto la stessa prova, con il risultato scritto sopra.
Lultima riga evidenziata prima di arrivare su StockQuote = CVErr(xlErrNA) era .WaitForResponse

in merito al controllo sul servizio WinHTTP, se ho ben capito la tua richiesta, la dll è quella che indicata nel percorso riportato in basso della finestra (Percorso: C:\WINDOWS\system32\winhttpcom.dll) ...?

un ultima cosa, l'altro giorno ho scritto un inesattezza: sul pc vecchio ho W10 pro 22H2, mentre su quello nuovo ho W11 pro 24H2
non so se possa essere una motivazione...

Grazie ancora a tutti per la disponibilità
brtbrn
Utente Junior
 
Post: 13
Iscritto il: 05/01/25 18:41

Re: Versioni diverse Office

Postdi Anthony47 » 14/01/25 20:47

Ah, quindi la .SEND viene accettata ma non la .WaitForResponse

Usa nel tuo browser (quale browser usi?) questo url, e dicci cosa ti viene visualizzato:
Codice: Seleziona tutto
https://query1.finance.yahoo.com/v8/finance/chart/IBM


Poi sostituisci l'attuale codice con quest'altro:
Codice: Seleziona tutto
Function StockQuote(ticker As String)
'V Test
' Get near real-time stock quote from Yahoo via JSON query

Dim URL As String, response As String, stripped As String, inbits() As String, i As Long
Dim lLog As String
Dim request As WinHttp.WinHttpRequest ' needs Tools|References|WinHTTP Services
On Error GoTo Err
lLog = "A"
URL = "https://query1.financez.yahoo.com/v8/finance/chart/" & Trim(ticker)
Set request = New WinHttp.WinHttpRequest
With request
    .Open "GET", URL, True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    lLog = lLog & ".1"
    .Send
    lLog = lLog & ".2" & ":" & Format(Timer, "0.00:")
    .WaitForResponse
    lLog = lLog & ".3" & ":" & Format(Timer, "0.00:")
    response = .ResponseText
End With
Debug.Print ">>>> " & ticker
Debug.Print response
Debug.Print "<<<<  " & ticker
lLog = lLog & "B"
If InStr(response, """result"":[]") <> 0 Then GoTo Err ' ticker not found

'kludge parse: strip JSON delimiters and quotes
stripped = Replace(Replace(Replace(Replace(Replace(response, "[", ""), "]", ""), "{", ""), "}", ""), """", "")

stripped = Replace(stripped, ":", ":,") ' keep colons for readability, but make them delimit
inbits = Split(stripped, ",") ' split
lLog = lLog & "C"
Debug.Print "UBIn:" & UBound(inbits)
lLog = lLog & "D"
i = LBound(inbits)
Do While inbits(i) <> "regularMarketPrice:" And i <= UBound(inbits) ' find "regularMarketPrice:" tag
    i = i + 1
Loop
lLog = lLog & " i=" & i
If i > UBound(inbits) Or Not IsNumeric(inbits(i + 1)) Then ' not found; look for previous close
    i = LBound(inbits)
    Do While inbits(i) <> "regularMarketPreviousClose:" _
      And i <= UBound(inbits)
        i = i + 1
    Loop
    If i > UBound(inbits) Or Not IsNumeric(inbits(i + 1)) Then
        lLog = lLog & " i=" & i & "--" & inbits(i + 1)
        GoTo Err
    End If
End If
Debug.Print "lLog=" & lLog
StockQuote = Val(inbits(i + 1)) ' price is next element
Exit Function

Err:
StockQuote = CVErr(xlErrNA)
Debug.Print "ERR: " & lLog
End Function


Poi inserisci la solita formula, =StockQuote("IBM"); dicci cosa la formula risponde (anche se lo immaginiamo). Poi ispeziona la "finestra Immediata" del vba e copia dalla ultima riga che comincia con ">>>> https...." fino in fondo e inserisci nel messaggio

PS: La dll che corrisponde ai servizi WinHttp e' quella corretta
Avatar utente
Anthony47
Moderatore
 
Post: 19496
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Versioni diverse Office

Postdi brtbrn » 14/01/25 21:01

uso chrome come browser, sia sul pc vecchio che quello nuovo

digitando https://query1.finance.yahoo.com/v8/finance/chart/IBM mi appare una videata con tutti i dati di quella pagina
(ti copi incollo solo le prime righe)

{"chart":{"result":[{"meta":{"currency":"USD","symbol":"IBM","exchangeName":"NYQ","fullExchangeName":"NYSE","instrumentType":"EQUITY","firstTradeDate":-252322200,"regularMarketTime":1736884443,"hasPrePostMarketData":true,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":217.2,"fiftyTwoWeekHigh":239.35,"fiftyTwoWeekLow":162.62,"regularMarketDayHigh":218.125,"regularMarketDayLow":214.69,"regularMarketVolume":2013665,"longName":"International Business Machines Corporation","shortName":"International Business Machines","chartPreviousClose":217.4,"previousClose":217.4,"scale":3,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","end":1736865000,"start":1736845200,"gmtoffset":-18000},"regular":{"timezone":"EST","end":1736888400,"start":1736865000,"gmtoffset":-18000},"post":{"timezone":"EST","end":1736902800,"start":1736888400,"gmtoffset":-18000}},"tradingPeriods":[[{"timezone":"EST","end":1736888400,"start":1736865000,"gmtoffset":-18000}]],"dataGranularity":"1m","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1736865000,1736865060,1736865120,1736865180,1736865240,1736865300,
etc

sostituendo il codice non cambia il risultato sulla cella A2: il risultato è sempre #N/D

aprendo la finestra immediata mi appare solo una riga con questo msg: ERR: A.1.2:75052,34:

spero di aver scritto\fatto tutto correttamente :-)

edit: ho visto che l'indirizzo riportato nell'ultimo codice VBA ha una "z" come ultima lettera della prima parola finance (https://query1.financez.yahoo.com/v8/finance/chart/" & Trim(ticker))...
hai volutamente scritto tu così... o devo correggere?
brtbrn
Utente Junior
 
Post: 13
Iscritto il: 05/01/25 18:41

Re: Versioni diverse Office

Postdi Anthony47 » 15/01/25 09:50

edit: ho visto che l'indirizzo riportato nell'ultimo codice VBA ha una "z" come ultima lettera della prima parola finance (https://query1.financez.yahoo.com/v8/finance/chart/" & Trim(ticker))...
hai volutamente scritto tu così... o devo correggere?
:( :( :(
Mannaggia! Quella Z e' una prova che ho fatto per vedere che succedeva...
Ho fatto tanti esperimenti e alla fine ti ho allegato uno dei tanti codici di prova, ma non quello che mi interessava piu' di tutti; che e' questo:
Codice: Seleziona tutto
Function StockQuote(ticker As String)
'V Test
' Get near real-time stock quote from Yahoo via JSON query

Dim URL As String, response As String, stripped As String, inbits() As String, i As Long
Dim lLog As String
Dim request As WinHttp.WinHttpRequest ' needs Tools|References|WinHTTP Services
On Error GoTo Err
lLog = "A"
URL = "https://query1.finance.yahoo.com/v8/finance/chart/" & Trim(ticker)
Debug.Print ">>>> " & URL
Set request = New WinHttp.WinHttpRequest
With request
    .Open "GET", URL, True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    lLog = lLog & ".1"
    .Send
    lLog = lLog & ".2" & ":" & Format(Timer, "0.00:")
    .WaitForResponse
    lLog = lLog & ".3" & ":" & Format(Timer, "0.00:")
    response = .ResponseText
End With
Debug.Print response
Debug.Print "<<<<  " & ticker
lLog = lLog & "B"
If InStr(response, """result"":[]") <> 0 Then GoTo Err ' ticker not found

'kludge parse: strip JSON delimiters and quotes
stripped = Replace(Replace(Replace(Replace(Replace(response, "[", ""), "]", ""), "{", ""), "}", ""), """", "")

stripped = Replace(stripped, ":", ":,") ' keep colons for readability, but make them delimit
inbits = Split(stripped, ",") ' split
lLog = lLog & "C"
Debug.Print "UBIn:" & UBound(inbits)
lLog = lLog & "D"
i = LBound(inbits)
Do While inbits(i) <> "regularMarketPrice:" And i <= UBound(inbits) ' find "regularMarketPrice:" tag
    i = i + 1
Loop
lLog = lLog & " i=" & i
If i > UBound(inbits) Or Not IsNumeric(inbits(i + 1)) Then ' not found; look for previous close
    i = LBound(inbits)
    Do While inbits(i) <> "regularMarketPreviousClose:" _
      And i <= UBound(inbits)
        i = i + 1
    Loop
    If i > UBound(inbits) Or Not IsNumeric(inbits(i + 1)) Then
        lLog = lLog & " i=" & i & "--" & inbits(i + 1)
        GoTo Err
    End If
End If
Debug.Print "lLog=" & lLog
StockQuote = Val(inbits(i + 1)) ' price is next element
Exit Function

Err:
StockQuote = CVErr(xlErrNA)
Debug.Print "ERR: " & lLog
End Function
(Cambiano solo un paio di righe ma preferisco allegare tutto il codice)

Rifai la prova e allega il contenuto della finestra immediata
Nota: Se vuoi cancellare il contenuto della finestra Immediata (per evitare confusione): Contr-g; poi Contr-a e Cancel

Comunque, visto che (la prova col browser) l'accesso al sito avviene correttamente, fai anche un'altra prova:
-metti un "breakpoint" (ti ricordi il pallino rosso che ti ha fatto mettere Raffaele?) sulla riga With request
-fai calcolare la solita e unica formula del tuo foglio (seleziona la cella, F2, Enter)
-il codice si fermerà evidenziando la riga con il breakpoint
-tramite F8, esegui una istruzione alla volta; prendi nota di quale e' l'istruzione che vai ad eseguire
-fermati pero' quando arrivi alla fatidica .WaitForResponse
-a questo punto vai sulla finestra Immediata e inserisci questo comando:
Codice: Seleziona tutto
?request.ResponseText

-se quello che ti viene risposto e' simile a quello che hai visto nel browser (magari piu' confuso) allora:
--cancella l'istruzione .WaitForResponse e al suo posto inserisci
Codice: Seleziona tutto
Application.Wait (Now + TimeValue("0:00:01"))

--prova poi la formula, tramite il solito F2, Enter sulla cella

Se così funzionasse allora abbiamo la conferma che l'unica cosa anomala e' questo singolo comando (WaitForResponse) e ci concentreremo su quello
Avatar utente
Anthony47
Moderatore
 
Post: 19496
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Versioni diverse Office":


Chi c’è in linea

Visitano il forum: brtbrn e 13 ospiti