2013-01-16 38 views
6

Excel VBA newbie qui. Ho solo bisogno di una macro che aggiorni le query che ho su un singolo foglio che sto visualizzando. Ho già la macro di aggiornamento, ma devo sempre specificare il nome del foglio che voglio aggiornare. È possibile avere la macro eseguita su qualsiasi foglio che sto visualizzando? Ecco la macro nel suo stato attuale:Excel VBA Usa foglio selezionato

Sub Refresh_Query() 
Sheets("Sheet1").Select 
Range("B6").Select 
Selection.QueryTable.Refresh BackgroundQuery:=False 
End Sub 

risposta

7

Si desidera utilizzare ActiveSheet.Name, come ad esempio:

Sub Refresh_Query() 
    Sheets(ActiveSheet.Name).Select 
    Range("B6").Select 
    Selection.QueryTable.Refresh BackgroundQuery:=False 
End Sub 
+0

Perfetto. Molte grazie. – user1985112

2

questo dovrebbe funzionare:

Sub Refresh_Query() 
    ActiveSheet.QueryTables(1).Refresh BackgroundQuery:=False 
End Sub 
+0

-1 ActiveSheet non ha alcuna proprietà QueryTable. Ha una proprietà QueryTables, quindi ActiveSheet.QueryTables (1) funzionerebbe. –

+0

Grazie, @Doug. Non lo sapevo (ovviamente). – chuff

+1

+1 per questa risposta modificata. Il 'Select' nella domanda iniziale e la risposta accettata sono ridondanti – brettdj

0

L'OP è ambigua: il testo chiede di Aggiorna tutte le tabelle di query sul foglio attivo, ma il codice di esempio aggiorna solo la tabella di una query che contiene la cella B3

Per aggiornare tabella solo una query utilizzare

Sub RefreshOneQuery() 
    Dim qt As QueryTable 
    On Error Resume Next ' in case there is no qt containing cell B6 
    Set qt = Range("B6").QueryTable 
    On Error GoTo 0 
    If Not qt Is Nothing Then 
     qt.Refresh BackgroundQuery:=False 
    End If 
End Sub 

Per aggiornare tutte le tabelle di interrogazione sull'uso foglio di

Sub RefreshAllQueries() 
    Dim qt As QueryTable 
    For Each qt In ActiveSheet.QueryTables 
     qt.Refresh BackgroundQuery:=False 
    Next 
End Sub