logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

VBA - Import określonych danych z arkuszy xls w folderze

Martins10 28 Paź 2012 00:39 3093 8
REKLAMA
  • #1 11458526
    Martins10
    Poziom 10  
    Posty: 9
    Witam,

    Mam problem z makrem które zaimportuje mi dane z wielu dokumentów .xls z zakresu powiedzmy ("A1:Z99"). Wszystkie te pliki Excela znajdują się w folderze D:\Dane.

    Zakres kopiowany z każdego arkusza ma być wklejany do aktywnego dokumentu .xls jeden pod drugim. Na sam koniec usunięte zostają puste wiersze i ustawiona zostaje czcionka Arial 12.

    Drugi case jest taki, mam inny folder i potrzebuję zrobić to samo, tylko że wklejać dane jedne obok drugich, szeregowo i potem usunąć puste kolumny.

    To co poznajdowałem gdzieś w Internecie i próbowałem sam walczyć:

    Kod: text
    Zaloguj się, aby zobaczyć kod



    Jeśli ktoś chciałby mi pomóc szerzej, to chciałbym zapytać o pętle które kopiowałyby już nie całe wyznaczone zakresy, a wszystko to co jest zapisane w danym pliku .xls. W poprzednim przypadku, gdyby coś kiedyś wyszło poza zakres to już nie zostanie skopiowane :/

    Pozdrawiam,
    Marcin
  • REKLAMA
  • #2 11459055
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    1. W zmiennej MyPath brakuje kocowego slash'a.
    2. Jeśli wszystkie arkusze, to pętla For Each arkusz w otwieranym pliku.
    3. Dla zakresów docelowych musisz utworzyć licznik wierszy (inkrementacja wewnątrz pętli)

    Zamiast kopiować całe zakresy przez Select-Copy_Paste i wyrzucać puste w kolejnej pętli, czy nie lepiej kopiować tylko niepuste wiersze/kolumny przez wskazanie Copy-Destination (bez Select'ów)?

    Odpowiedź na ostatnie pytanie zależy od układu danych w plikach źródłowych. Najbardziej elastyczne dla nieokreślonych zakresów zdaje się być UsedRange. Ale co z tym dalej? Musisz wybrać jakąś metodę. Może najwydajniejsze okazać się kopiowanie (import) całych arkuszy...
  • #3 11462557
    Martins10
    Poziom 10  
    Posty: 9
    Cześć,
    Dzięki za odpowiedź ale ja jestem strasznie zielony w VBA :P
    Próbuję w poniższym kodzie zastosować For Each arkusz, i kopiowanie jak mówiłeś, ale są to rzeczy które znalazłem w Internecie i nie działają bo wyskakuje mi niedopasowanie - "mismatch".

    Inkrementacja wewnatrz pętli jest dla mnie pojęciem bardzo odległym, i na razie Google mi nie pomogło :/


    Stworzyłem coś takiego:

    Kod: text
    Zaloguj się, aby zobaczyć kod



    Jeśli mógłbyś troszkę mi pomóc przy kodzie, będę wdzięczny.
    Marcin
  • REKLAMA
  • #4 11462676
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Potrzebujesz dwóch, zagnieżdżonych pętli. Taka najprostsza przeróbka kodu z postu #1
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Dla kopiowania w poziomie wystarczy zmienić linię z "wybiera gdzie ma kopiować" (Cells(1, kol) i liczyć kolumny. Wcześniej zmiana nazwy zmiennej "wrs" na "kol" i inkrementacja kol=kol+26. Usuwanie pustych wierszy w drugiej części makra (Rows) też należy w tym przypadku zmienić na kolumny (Columns)...

    Edit: Skorygowałem nieco kod. Zapomniałem, że to dla wszystkich arkuszy ;)
  • REKLAMA
  • #5 11463387
    Martins10
    Poziom 10  
    Posty: 9
    Hmm, to makro przed edycją, działa w miarę poprawnie.
    Dodałem tylko "*" by działało dla każdego wersji arkusza xls.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Kod: text
    Zaloguj się, aby zobaczyć kod


    Natomiast to zedytowane makro nie działa tak do końca, bo kopiuje wszystko, ale potem nie wkleja do aktywnego wkb.
    Próbowałem coś z Selection.Paste, ale na razie nic nie wymyśliłem.

    Marcin.
  • #6 11463400
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Brakuje slash'a w MyPath ;)
    W moim poście już poprawiłem.
  • #7 11491231
    Martins10
    Poziom 10  
    Posty: 9
    dzięki za pomoc.

    Teraz sam będę dłubał w kodach i próbował je ubogacać :)
    Marcin
  • REKLAMA
  • #8 14895493
    ScAArY
    Poziom 2  
    Posty: 3
    Witam,

    a mam pytanie, jak zrobić żeby skrypt w momencie wklejania nie czyscił trzech pierwszych wierszy (a'la stalych naglowkow?).

    Cos w stylu odsunięcia operacji o 3 wiersze w dół.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik ma problem z makrem VBA, które ma importować dane z wielu plików .xls znajdujących się w folderze D:Dane. Wymaga, aby dane z zakresu ("A1:Z99") były wklejane do aktywnego dokumentu jeden pod drugim, a następnie usunięte zostały puste wiersze i ustawiona czcionka Arial 12. W drugim przypadku użytkownik potrzebuje wklejać dane obok siebie i usuwać puste kolumny. Odpowiedzi sugerują poprawki w kodzie, takie jak dodanie ukośnika w ścieżce, użycie pętli For Each do iteracji przez arkusze oraz kopiowanie tylko niepustych wierszy. Użytkownik prosi o pomoc w implementacji tych zmian oraz o możliwość pominięcia trzech pierwszych wierszy podczas wklejania danych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA