2013-04-01 13 views
9

Mi chiedo se ci sia un guadagno in termini di prestazioni quando si utilizzano collegamenti esterni rispetto all'apertura di un foglio di calcolo e alla copia di celle (tramite VBA).Excel: l'utilizzo di collegamenti esterni può migliorare le prestazioni?

Immagino che Excel deve aprire il file lo stesso, ma quando ho test utilizzando il seguente codice, collegamenti esterni viene fuori più veloce:

Dim t As Double 
Dim rng As Range 

For Each rng In shtId.Range("A1:A5") 
    t = Now 
    ThisWorkbook.Names("rngID").RefersToRange = rng 
    ThisWorkbook.UpdateLink "H:\manualData.xlsx", xlExcelLinks 
    Debug.Print "link: " & Format(Now - t, "######.0000000") 

    t = Now 
    Workbooks.Open "H:\manualData.xlsx", readonly:=True 
    ActiveWorkbook.Close False 
    Debug.Print "open: " & Format(Now - t, "######.0000000") 
Next 


Results: 

link: .0000116 
open: .0000231 
link: .0000116 
open: .0000347 
link: .0000000 
open: .0000347 
link: .0000000 
open: .0000347 
link: .0000000 
open: .0000347 

La cartella di lavoro ha un intervallo di celle con le formule di ricerca immesso su un campo ID. Queste formule hanno collegamenti esterni. Per testarlo, cambio l'ID e impone un aggiornamento. Per testare l'approccio aperto per i file, apro e chiudo il file sorgente.

Sto cercando di velocizzare un processo che sta avendo un problema a causa della bassa larghezza di banda sulla rete. Ho già esplorato varie opzioni e vorrei solo capire se questo è valido. Ho cercato su questo argomento e alcuni dicono che i collegamenti esterni potrebbero causare problemi di prestazioni, mentre alcuni dicono diversamente. Mi piacerebbe avere un'idea migliore del meccanismo che sta dietro i collegamenti esterni in modo da poter capire cosa aspettarmi quando implementato.

Qualche idea?

+0

Buona domanda. Non lavoro molto con i link esterni, ma per me è logico che l'aggiornamento di un link esterno (ad esempio, l'accesso diretto al suo contenuto) sia più rapido dell'apertura del file, dell'accesso ai suoi contenuti e della chiusura del file. Ma ricordo anche alcuni casi in cui i collegamenti di aggiornamento sono più veloci quando entrambe le cartelle di lavoro sono aperte. Quindi, buona domanda, +1 per te, ansioso di vedere cosa ne pensano gli altri. –

+0

Misurare nuovamente con (1) ScreenUpdating set false; e (2) dati sufficienti per guidare i tempi misurati> 2 o 3 secondi. Ci sono troppi confondimenti con misurazioni delle prestazioni inferiori a quelle, rendendole inutili per confronti significativi. –

+3

Inoltre, francamente, considero i fogli di calcolo con collegamenti esterni come fogli di calcolo "spezzati". È solo una questione di tempo fino alla pubblicazione di risultati errati, possibilmente con conseguenze disastrose. Metti i tuoi dati in un database, dove può essere gestito correttamente, anziché all'interno di uno strumento analitico senza supporto per una corretta gestione dei dati. –

risposta

1

È molto più lavoro, ma leggere/scrivere i dati da/a un file XML (utilizzando MSXML) risolverebbe il problema delle prestazioni. È un percorso che sono stato costretto ad adottare in determinate circostanze in cui la larghezza di banda è stata bassa.

La velocità con cui VBA può recuperare i dati ed eseguire i calcoli è molto più rapida rispetto all'utilizzo di più collegamenti. A seconda delle circostanze; puoi farlo in un evento di apertura della cartella di lavoro o anche in un evento di modifica specifico (ComboBox, ecc.) poiché lavori solo con kB di dati.

Problemi correlati