Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Access VBA] - Przyśpieszenie eksportu danych z kwerend do pliku excel

kono21 25 Jul 2016 11:23 2796 4
  • #1
    kono21
    Level 2  
    Witam

    Jak w temacie czy jest możliwość przyspieszenia eksportu danych z kilku kwerend do jednego pliku Excel? Stworzyłem bazę na podstawie dużego pliku excelowego. Zaciągam dane do tabeli access ( tabele połączone aby na bieżąco dane się aktualizowały ). Na podstawie tabeli ( już z Accessa ) utworzyłem około 10 kwerend wybierających z których każda pokazuje mi inne niezbędne dane. Do tego stworzony jest formularz w którym mam możliwość wyboru które kwerendy chciał bym eksportować do pliku Excel + wybór odpowiednich dat. Podczas eksportu danych każda z kwerend otwiera tabelę źródłową i filtruje sobie dane. Jest możliwość aby access otwierania kwerend nie musiał za każdym razem otwierać tabeli źródłowej i zakładać filtrów tylko zmieniał sobie filtry podczas uruchamiania kolejnych kwerend? Myślę że mogło by to przyspieszyć pracę ( obecnie cała operacja trwa ok. 10 minut i problem jest taki że tabela excelowa jest udostępniona i jeśli ktoś w tym czasie spróbuje zapisać Excela plik jest zablokowany )ale nie wiem jak to zrobić. Proszę o jakieś wskazówki. Udzielę wszelkich niezbędnych informacji.


    Poniżej kod którym eksportuję dane:
    If Opcja58 = True Then _
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Postp_Accel_Rev", "T:\ORDER CENTER\Info.xlsm", False, "Postp_Accel_Rev", acExportQualityPrint
    If Opcja60 = True Then _
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Postp_Accel_OTHERS", "T:\ORDER CENTER\Info.xlsm", False, "Postp_Accel_OTHERS", acExportQualityPrint
    If Opcja62 = True Then _
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Blocked_REV", "T:\ORDER CENTER\Info.xlsm", False, "Blocked_REV", acExportQualityPrint
    If Opcja64 = True Then _
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Blocked_Others", "T:\ORDER CENTER\Info.xlsm", False, "Blocked_Others", acExportQualityPrint
    If Opcja66 = True Then _
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Lack of offer", "T:\ORDER CENTER\Info.xlsm", False, "Lack of offer", acExportQualityPrint
    If Opcja68 = True Then _
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Offer in check", "T:\ORDER CENTER\Info.xlsm", False, "Offer in check", acExportQualityPrint

    Jest to wycinek kodu, kwerend jest więcej
  • #2
    JRV
    VBA, Excel specialist
    Dlaczego nie zrobić w Excel import z bazy Access'a?
  • #3
    JacekCz
    Level 39  
    technologie "push" komórek do Excella (dawniej brandowane DDE, polem OLE, potem jeszcze inaczej) są generalnie (bardzo) wolne.

    Po drugie, wydaje mi się że scenariusz użytkowy "excell jako dzielona baza" jest zakonserwowaną prowizorką. Im szybciej to zmienicie, tym lepiej. Choć sama wymiana nie musi być organizacyjnie łatwa.
  • #4
    kono21
    Level 2  
    Niestety import z Access działa równie wolno. Wydaje mi się że import tabeli z excela obróbka w access a potem znowu import z access do excel nie jest najlepszym rozwiązaniem. Obecnie to co robię w access mamy już w excel na zasadzie tabeli przestawnych ale plik musi być umieszczony na dysku sieciowym i zajmuje 20mb ( ledwo działa i niedługo chyba wybuchnie ), wyeksportowane te same dane z access zajmują około 500 kb. Jednak eksport trwa długo.

    Jeśli chodzi o "excela jako zakonserwowaną prowizorkę " masz rację ale w tabeli excelowej jest masa pól obliczeniowych i łączy do innych plików, może z niego korzystać jednocześnie kilka osób pracując na różnych rekordach, baza jest cały czas aktualna.
  • #5
    marek_s1
    Level 13  
    Generalnie dostałeś odpowiedź - wszystko do przebudowy.

    Ale ..., zrób sobie trzy testy:

    1. Baza oraz tabela excelowa (arkusz) są na dysku lokalnym

    2. Nie linkujesz arkusza, tylko go importujesz "na okres eksportu" do tabeli tymczasowej (migawka tabeli)

    3. zrób eksport do pliku tekstowego

    Wnioski wyciągnij sobie sam.

    BTW.
    Spróbuj przeorganizować zbieranie danych, tak aby użytkownicy wprowadzali tylko dane jak najmniej przeliczone - bezpośrednio do Accessa. Resztę załatwi Access - w postaci raportów, kwerend, tabel pomocniczych, formularzy itp.