Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - import z wielu plików do jednego arkusza ze zmianą układu

darpia 19 Paź 2017 22:05 471 3
  • #1 19 Paź 2017 22:05
    darpia
    Poziom 2  

    Witam,
    W VBA jestem początkujący , niestety nie mogę sobie poradzić ze stworzeniem poniżej opisanego makra .

    Mam kilkaset plików w formacie .csv o nazwie RRRRMMDD_prognoza (gdzie: RRRR-rok, MM-miesiąc, DD-dzień). Ich zawartość chciałbym zaimportować do excela tak, by zawartość każdego z tych plików pojawiła się jeden pod drugim (względem narastającej daty zawartej w pliku) w jednym arkuszu w pliku o nazwie "zestawienie" w tej samej lokalizacji co pliki źródłowe.

    W załączeniu przesyłam pliki źródłowe.zip - pliki mają zawsze taki sam układ i zawsze tyle samo kolumn, jedynie liczba lokalizacji może się zmieniać lub prognozy mogą obejmować więcej niż 3 kolejne dni, przykładowo w pliku 20171010_prognoza.csv są cztery lokalizacje (poprzednio były dwie) oraz zwiększyła się liczba prognoz do czterech dni (poprzednio były trzy).
    Natomiast w pliku pliki.zip w arkuszach zamieściłem komentarze do plików źródłowych oraz w arkuszu "zestawienie" zamieściłem jak miałby wyglądać układ pliku po wykonaniu makra - będzie inny niż w plikach źródłowych.
    Poniżej znaleziony kod, na którym próbowałem coś robić...

    Jeżeli ktoś mógłby pomóc będę niezmiernie wdzięczny . Ewentualne komentarze wyjaśniające działanie także bardzo pomogą .

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0 3
  • #2 20 Paź 2017 15:08
    Luckymag
    Poziom 11  

    Nie mogę niestety pzestudiować plików i podać gotowaca.
    Może jednak pomogę wskazówką, że jeśli w VB edytorze w narzędziach w repozytorium (ang: References) zaznaczysz bibliotekę Microsoft ActiveX Data Objects Recordset 6.0 Library to możesz użyć właściwości rs.RecordCount oraz rs.Fields.Count gdzie rs to recordset
    to pomaga ustalić ile zaimportowałeś rekordów i gdzie zaimportować kolejny plik.

    0
  • Pomocny post
    #3 21 Paź 2017 01:38
    lanzul
    Poziom 21  

    Jeśli w tych plikach ".csv" jest dużo danych, dużo linijek, to nie będzie to najlepsza metoda (ten załączony kod z odczytem linijka po linijce) odczytu tych plików - zbyt długo będą one otwarte.
    Lepiej by było to odczytywać przy pomocy LOF, np.:

    Kod: vba
    Zaloguj się, aby zobaczyć kod

    lub
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Plik byłby wtedy otwarty tylko i wyłącznie na czas odczytu zawartości do zmiennej.

    Równie dobrym sposobem byłaby metoda z:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    a może nawet najlepsza, trzeba by tylko pamiętać o imporcie w postaci tekstu i o usuwaniu w locie nazw zdefiniowanych jakie przy okazji niej tworzą się w arkuszu, ale to nie kłopot przecież ...

    0
  • #4 24 Paź 2017 23:36
    darpia
    Poziom 2  

    Witam,
    Bardzo dziękuję za wskazówki, jednak moja znajomość VBA jest jeszcze na tyle mała, że mimo podpowiedzi nie za bardzo potrafię poradzić sobie z problemem.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo