2013-04-01 13 views
9

Zastanawiam się, czy występuje wzrost wydajności podczas korzystania z zewnętrznych linków vs. otwierania arkusza kalkulacyjnego i kopiowania komórek (przy użyciu VBA).Excel: Czy korzystanie z linków zewnętrznych może poprawić wydajność?

Mogę sobie wyobrazić, że Excel musi otworzyć plik tak samo, ale kiedy test za pomocą następującego kodu, zewnętrzne łączenie wychodzi szybciej:

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 

Skoroszyt posiada zakres komórek z formułami odnośników wpisane na pole ID. Te formuły mają linki zewnętrzne. Aby go przetestować, zmieniam identyfikator i wymuszam aktualizację. Aby przetestować otwarte podejście do pliku, po prostu otwieram i zamykam plik źródłowy.

Szukam przyspieszenia procesu, który ma problem z powodu niskiej przepustowości w sieci. Zbadałem już różne opcje i chciałbym zrozumieć, czy jest to poprawne. Szukałem na ten temat, a niektórzy twierdzą, że linki zewnętrzne mogą powodować problemy z wydajnością, podczas gdy niektórzy twierdzą, że jest inaczej. Chciałbym lepiej zrozumieć mechanizm zewnętrznych linków, aby móc zrozumieć, czego się spodziewać po wdrożeniu.

Jakieś myśli?

+0

Dobre pytanie. Nie współpracuję z linkami zewnętrznymi, ale ma sens, że samo uaktualnienie linku zewnętrznego (tj. Bezpośredni dostęp do jego zawartości) byłoby szybsze niż otwarcie pliku, uzyskanie dostępu do jego zawartości i zamknięcie pliku. Przypominam jednak także o przypadkach, gdy aktualizowanie łączy jest szybsze, gdy oba skoroszyty są otwarte. Tak, dobre pytanie, +1 dla ciebie, pragnąc zobaczyć, co inni o nim mówią. –

+0

Zmierz ponownie za pomocą (1) Ustawiając opcję Ustawiającą ekran; i (2) wystarczająca ilość danych do pomiaru zmierzonych czasów> 2 lub 3 sekundy. Zbyt wiele jest pomyłek w pomiarze wydajności, co czyni je bezużytecznymi do sensownych porównań. –

+3

Szczerze mówiąc, uważam arkusze kalkulacyjne z linkami zewnętrznymi za "uszkodzone" arkusze kalkulacyjne. To tylko kwestia czasu, zanim zostaną opublikowane niepoprawne wyniki, prawdopodobnie z katastrofalnymi konsekwencjami. Umieść dane w bazie danych, gdzie można je prawidłowo zarządzać, zamiast w narzędziu analitycznym, bez wsparcia właściwego zarządzania danymi. –

Odpowiedz

1

To znacznie więcej pracy, ale odczytanie/zapis danych z/do pliku XML (przy użyciu MSXML) rozwiązałoby problem z wydajnością. Jest to droga, którą musiałem przyjąć w pewnych okolicznościach, w których przepustowość była niska.

Szybkość, z jaką VBA może pobierać dane i wykonywać obliczenia, jest znacznie szybsza niż przy użyciu wielu łączy. W zależności od okoliczności; możesz to zrobić w przypadku zdarzenia Workbook Open Event lub nawet określonego zdarzenia zmiany (ComboBox itp.), ponieważ pracujesz tylko z kB danych.

Powiązane problemy