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: 19497
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: 16
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: 16
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: 19497
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: 16
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: 19497
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Versioni diverse Office

Postdi brtbrn » 15/01/25 18:03

ciao Anthony,
allora, ho fatto la prova cambiando il codice, e questo è il contenuto della finestra immediata:
>>>> https://query1.finance.yahoo.com/v8/finance/chart/IBM
ERR: A.1.2:63664,58:

sulla seconda prova:
sulla cella A2 compare il solito valore 0 (anzichè #N/D)
sul codice viene evidenziata la riga con With request
premo F8, arrivo alla riga .WaitForResponse, inserisco la stringa che mi hai detto ottenendo questo link:
https://query1.finance.yahoo.com/v8/fin ... sponseText
lo provo sul browser e ottengo gli stessi dati.

cancello .WaitForResponse e inserisco l'altra stringa Application.Wait (Now + TimeValue("0:00:01"))

provo a vedere cosa succede sulla cella A2 del foglio, ma ritorna l'errore #N/D e sulla finestra immediata appare il msg
>>>> https://query1.finance.yahoo.com/v8/finance/chart/IBM
ERR: A.1.2:64354,83:.3:64354,83:

spero di aver fatto tutti i passaggi correttamente...non so che dire
brtbrn
Utente Junior
 
Post: 16
Iscritto il: 05/01/25 18:41

Re: Versioni diverse Office

Postdi brtbrn » 15/01/25 18:03

domanda da profano:

da quello che sto capendo, tu mi stai gentilmente fornendo varie possibilità che possa essere un funzionamento non corretto della macro (del codice originario diciamo)... ma siccome, da verifiche fatte da te e anche da Raffaele sui vs pc, sembra che il codice macro originario funzioni correttamente (e sul mio pc vecchio anche), non è che probabilmente è solo una questione di settaggi di office?

come ho detto fin da subito, magari mi sto perdendo in un bicchier d'acqua... fatto di mancate spunte relativamente a qualche opzione nella configurazione di excel... qualche DLL o libreria... o qualche strano "artifizio software che deve essere aggiornato/selezionato...
leggo ad esempio sul codice la voce json... che facendo qualche ricerca sul web mi par di aver capito si riferisca ad un tipo di query particolare (le json query appunto, di cui non so nulla)... magari occorre installare qualcosa che richiami tale tipologia di query...

ps: come sempre, scusa se mi esprimo in maniera impropria... :oops:
brtbrn
Utente Junior
 
Post: 16
Iscritto il: 05/01/25 18:41

Re: Versioni diverse Office

Postdi Raffaele53 » 15/01/25 18:32

Ho installato W11 tramite https://www.youtube.com/watch?v=NXW0DVBTd4s
Provato tutti i codice in questo post (tranne la Z) è funziona tutto. Verifica se le TUE DLL siano corrette (mi spiace mà il mio sapere termina qui)

In Excel2019- \Visual Basic\Strumenti si chiama Microsoft WinHTTP Services version 5.1

In W10-Windows\System32\ esiste WinHTTPcom.dll di 102.912 byte vers 10.0.19041.3636
In W10-Windows\System32\ esiste WinHTTP.dll di 1.096.192 byte

In W11-Windows\System32\ esiste WinHTTPcom.dll di 131.072 byte vers 10.0.26100.1882
In W11-Windows\System32\ esiste WinHTTP.dll di 1.216.296 byte vers 10.0.26100.1882
Raffaele53
Utente Junior
 
Post: 45
Iscritto il: 03/10/24 13:06

Re: Versioni diverse Office

Postdi brtbrn » 15/01/25 19:44

Ciao Raffaele, grazie del contributo

Allora su excel la dll è quella che hai scritto ossia, Microsoft WinHTTP Services version 5.1

per quanto riguarda W11, sul mio pc la versione della WinHTTPcom.dll è come la tua, 10.0.26100.1882
mentre quella WinHTTP.dll è 10.0.26100.2454

potrebbe essere questo un problema?
brtbrn
Utente Junior
 
Post: 16
Iscritto il: 05/01/25 18:41

Re: Versioni diverse Office

Postdi Anthony47 » 15/01/25 22:19

Gia’ dopo il secondo messaggio il problema e’ stato spostato fuori da Excel.
Speravo potessimo restringere sempre di piu’ il campo di errore, ma la cosa piu’ ristretta che possiamo dire e’ che il problema giace all’interno dei WinHttp Services, che sono erogati dal sistema operativo.
L’ultima dimostrazione sta nel fatto che dopo la “request.send” non c’e’ una valida “request. ResponseText”; avresti dovuto vedere, nella finestra Immediata, qualcosa come
Codice: Seleziona tutto
?request.ResponseText
{"chart":{"result":[{"meta":{"currency":"USD","symbol":"IBM","exchangeName":"NYQ","fullExchangeName":"NYSE","instrumentType":"EQUITY","firstTradeDate":-252322200,"regularMarketTime":1736888402,"hasPrePostMarketData":true,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":217.75,"fiftyTwoWeekHigh":239.35,"fiftyTwoWeekLow":162.62,"regularMarketDayHigh":218.125,"regularMarketDayLow":214.69,"regularMarketVolume":2690859,"longName":"International Business Machines Corporation","shortName":"International Business Machines","chartPreviousClose":217.4,"previousClose":217.4,"scale":3,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","end":1736951400,"start":1736931600,"gmtoffset":-18000},"regular":{"timezone":"EST","end":1736974800,"start":1736951400,"gmtoffset":-18000},"post":{"timezone":"EST","end":1736989200,"start":1736974800,"gmtoffset":-18000}},"tradingPeriods":[[{"timezone":"EST","end":1736888400,"start":1736865000,"gmtoffset":-18000}]],"dataGranulari
ty":"1m","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1736865000,1736865060,1736865120,1736865180,1736865240,1736865300,1736865360,1736865420,1736865480,1736865540,1736865600,1736865660,1736865720,1736865780,1736865840,1736865900,1736865960,1736866020,1736866080,1736866140,1736866200,1736866260,1736866320,1736866380,1736866440,1736866500,1736866560,1736866620,1736866680,1736866740,1736866800,1736866860,1736866920,1736866980,1736867040,1736867100,1736867160,1736867220,1736867280,1736867340,1736867400,1736867460,1736867520,1736867580,1736867640,1736867700,1736867760,1736867820,1736867880,1736867940,1736868000,1736868060,1736868120,1736868180,1736868240,1736868300,1736868360,1736868420,1736868480,1736868540,1736868600,1736868660,17 etc etc

(Mentre tu hai trovato come risposta il solo link della richiesta)
La dll del servizio, per quello che ho letto, e’ la winhttpcom.dll; io ho (su Win11) la versione 10.0.26100.1882, circa 128 KB
Non so se la winhttp.dll ha un qualche utilizzo, era la dll di vecchie versioni fa; io ho (nello stesso percorso della winhttpcom.dll) la versione 10.0.26100.2454, circa 1.15 MB; come Bruno, insomma.

L’ultima cosa che ti chiederei di fare e’ di provare ad avviare Excel come amministratore e vedere se cambia qualcosa.
Per avviare Excel come amministratore:
-pulsante Start di Windows, tasto dx sull’icona del programma Excel, scegliere “Esegui come amministratore”; poi carichi il file e fai le prove con la solita formula.
Ma se per caso funzionasse siamo sempre nel campo delle prestazioni gestite dal sistema operativo; e io il suggerimento “reinstalla (per prova!) il sistema operativo" non te lo do!

Ho chiesto a Dylan, che di “sistemi” ne sa piu’ di me, di dare uno sguardo a questa discussione, vediamo se puo' offrire un contributo...

E se proprio non ne usciamo proveremo a riscrivere la funzione usando una richiesta Xmlhttp
Avatar utente
Anthony47
Moderatore
 
Post: 19497
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: Nessuno e 15 ospiti