Domanda

Seleziona i dati dalla sorgente esterna
Ho una connessione dati che pensiti ai dati utilizzando a select Interrogazione da SQL-Server in un foglio Excel usando il codice VBA come questo:

With ActiveWorkbook.Connections("x"). _
    OLEDBConnection
    .BackgroundQuery = True
    .CommandText = Array( _
    "SELECT ... FROM ...
...
ActiveWorkbook.Connections("x").Refresh

Anche la tabella dei perni collegati ai dati importati
Tuttavia, per quanto posso dire ActiveWorkbook.Connections("x").Refresh Esegui asinchonius e voglio eseguire il codice che viene eseguito dopo che l'aggiornamento è terminato, in modo da poter eseguire questo codice:

Private Sub UpdatePivot()
Dim PV As PivotItem

  For Each PV In ActiveSheet.PivotTables("PT1").PivotFields("PN").PivotItems
    If PV.Name <> "(blank)" Then
      PV.Visible = True
    Else
      PV.Visible = False
    End If
  Next
End Sub

ma solo quando i dati vengono letti in
Come faccio a sapere quando l'aggiornamento è finito di ottenere tutti i dati?
Cosa devo fare solo per gestire il UpdatePivot sub dopo l'aggiornamento è completo senza ricorrere a sleep trucchi.

PS A volte la query è veloce (<1 sec), a volte è lenta (> 30 sec) a seconda dei dati esatti che sto selezionando, il che è dinamico.

È stato utile?

Soluzione

Non è una soluzione geniale, ma potresti fare ActiveWorkbook.Connections("x").Refresh eseguire in modo sincrono mediante impostazione

.BackgroundQuery = False

Un'altra soluzione più complessa sarebbe quella di pollicare lo stato della connessione controllando il .Refreshing Proprietà all'interno di un costrutto di loop.

Altri suggerimenti

.BackgroundQuery = False non garantirà l'esecuzione sincrona dopo l'aggiornamento dei dati.

Provalo da solo creando una semplice query e nella subroutine di Worksheet_Change Aggiungi codice per selezionare alcune celle. Spesso posso ottenere 2 comandi da sparare prima che appaia il cerchio di attesa/timeout.

Quindi non posso determinare se la query ha restituito i dati giusti. Ho provato a impostare una cella di riferimento sul valore di una colonna di query centrale e ho verificato che i due siano uguali - purtroppo il Worksheet_Change L'evento si accende due volte dopo l'aggiornamento dei dati!

Questo mi sta facendo impazzire. Devo solo andare a stampare un grafico dopo l'aggiornamento della query riuscita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top