Risolto VBA - Rileva conclusione refresh Query

Franz7219

Nuovo utente
Original poster
14 Luglio 2021
12
0
1
2016,2021
Ciao a tutti,
volevo sapere se esiste modo di impostare un "controllo" nella routine VBA che si "accorga" quando il refresh di una query è concluso.
Mi spiego meglio, spero....ho delle query che aggiorno tramite VBA in sequenza, volevo inserire un controllo che ad es. rilevasse la conclusione dell'aggiornamento della prima per lanciare ad es. un MSGBox e così via....
Grazie in anticipo a chiunque mi fornisca qualche spunto
 

Bruno

Excel/VBA Expert
Staff
13 Settembre 2015
3.732
1.194
245
Italy
365/64 Bit W10
Ciao

Verifica se questo codice intercetta anche l'aggiornamento delle Query

Visual Basic:
Do Until Application.CalculationState = xlDone
    DoEvents
Loop
 

Franz7219

Nuovo utente
Original poster
14 Luglio 2021
12
0
1
2016,2021
Ciao

Verifica se questo codice intercetta anche l'aggiornamento delle Query

Visual Basic:
Do Until Application.CalculationState = xlDone
    DoEvents
Loop
Ciao Bruno,

non so se lo sto integrando correttamente...ad esempio quì dove dovrei inserirlo ????

Visual Basic:
Sub RefreshAllQuery()

ActiveWorkbook.Connections("Query - PrimaQuery").Refresh
 MsgBox "Tabella Numero 1 aggiornata", vbInformation, " "
    
ActiveWorkbook.Connections("Query - SecondaQuery").Refresh
 MsgBox "Tabella Numero 2 aggiornata", vbInformation, " "

ActiveWorkbook.Connections("Query - TerzaQuery").Refresh
 MsgBox "Tabella Numero 3 aggiornata", vbInformation, " "
 
End Sub

Grazie
 

Bruno

Excel/VBA Expert
Staff
13 Settembre 2015
3.732
1.194
245
Italy
365/64 Bit W10
Ciao

Ora devi controllare se serve allo scopo, il codice controlla se ci sono ricalcoli del foglio in corso..

Visual Basic:
Sub RefreshAllQuery()

    ActiveWorkbook.Connections("Query - PrimaQuery").Refresh
    
    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop
    MsgBox "Tabella Numero 1 aggiornata", vbInformation, " "
    
    ActiveWorkbook.Connections("Query - SecondaQuery").Refresh
    
    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop
    MsgBox "Tabella Numero 2 aggiornata", vbInformation, " "

    ActiveWorkbook.Connections("Query - TerzaQuery").Refresh
    
    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop
    MsgBox "Tabella Numero 3 aggiornata", vbInformation, " "
 
End Sub
 

Franz7219

Nuovo utente
Original poster
14 Luglio 2021
12
0
1
2016,2021
No, mi pare non faccia al caso mio...
Il Messaggio compare appena è inziato il refresh della query e non solamente quando questo si è concluso

Grazie comunque per la dritta....
 

Enea

Utente assiduo
3 Settembre 2019
3.012
641
145
Nord Milano
Excel 2013
ciao
potresti creare un accrocchio...
Query1 crea un valore minuto... e poi fa un merge con tabella1 (alla fine cancello la colonna tabella)
Tabella1 deve essere l'ultima query che viene elaborata Il merge dovrebbe sancire l'ultimo passaggio
Prima di lanciare l'aggiornamento cancelli il valore e quando il valore della cella cambia alla fine dell'elaborazione >>> intercetti l'evento es. con la proprietà change

m:
// Query1
let
    Origine = DateTime.LocalNow(),
    #"Minuto estratto" = Time.Minute(Origine),
    #"Conversione in tabella" = #table(1, {{#"Minuto estratto"}}),
    #"Rinominate colonne" = Table.RenameColumns(#"Conversione in tabella",{{"Column1", "Minuto"}}),
    #"Merge di query eseguito" = Table.NestedJoin(#"Rinominate colonne",{"Minuto"},Tabella1,{"nome"},"Tabella1",JoinKind.LeftOuter),
    #"Rimosse colonne" = Table.RemoveColumns(#"Merge di query eseguito",{"Tabella1"})
   
in
#"Rimosse colonne"

// Tabella1
let
    Origine = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
    #"Modificato tipo" = Table.TransformColumnTypes(Origine,{{"cognome ", type text}, {"nome", type text}, {"cella", Int64.Type}}),
    #"Raggruppate righe" = Table.Group(#"Modificato tipo", {"nome"}, {{"kk", each Text.Combine([#"cognome "],", "), type text}})
in
    #"Raggruppate righe"
 

Franz7219

Nuovo utente
Original poster
14 Luglio 2021
12
0
1
2016,2021
volevo sapere se esiste modo di impostare un "controllo" nella routine VBA che si "accorga" quando il refresh di una query è concluso.

Prova, nelle proprietà della connessione, ad eliminare la spunta alla voce []Abilita aggiornamento in background.
Perfetto.....funziona senza alcuna altra riga di codice
Grazie mille a tutti ed ovviamente a scossa che mi ha risolto il dilemma