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

Makro do kopiowania danych z wielu plików do arkuszy I L - IX L

zbysiomysio 25 Lut 2017 21:28 1392 10
REKLAMA
  • #1 16307195
    zbysiomysio
    Poziom 6  
    Posty: 249
    Ocena: 40
    Mam makro, które kopiuje ze wskazanego pliku kolumny A:N i wkleja do odkrywanego arkusza w pliku z makrem. Takich plików, z których są kopiowane kolumny może być do 9 (może być mniej). Arkusze do których są kopiowane kolumny mają nazwy 'I L", "II L" itd do "IX L". Jak zrobić, żebym nie musiał każdorazowo uruchamiać makra do każdego pliku. Chodzi mi o to, żeby po zaznaczeniu kilku plików (z których mają być kopiowane kolumny), makro wpierw wyczyściło wszystkie arkusze ("I L" do "IX L"), następnie jeżeli to możliwe wg alfabetycznej nazwy plików otwierało by mi pierwszy plik, odkrywało arkusz "I L" i kopiowało kolumny A:N, później przy drugim pliku ta sama procedura z "II L" itd..Następnie we wszystkich odkrytych arkuszach (od 'I L" do ostatniego odkrytego) byłaby wykonana procedura, która jest w moim makrze i odbywa się po zamknięciu kopiowanego pliku. Poniżej przykładowy kod dla pierwszego pliku kopiowanego do arkusza "I L"
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    .
  • REKLAMA
  • #2 16307264
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Nie analizowałem całości makra, ale nawiązując do tematu związanego z sortowaniem przy FileDialog.AllowMultiSelect=True, wyglądałoby to tak:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    Gdzie do 'wkb2' przypisywane są kolejne wybrane pliki (elementy kolekcji).
  • REKLAMA
  • #3 16307438
    zbysiomysio
    Poziom 6  
    Posty: 249
    Ocena: 40
    Stworzyłem coś takiego, ale nie mogę sprawdzić, bo gdzie jest błąd i pokazuje się komunikat Block If without End If, ale nie potrafię znaleźć tego błędu.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • #4 16307466
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Nie zamknąłeś bloku 'With fd'. Dodaj na końcu 'End With' (lub tam, gdzie uważasz że powinien być zamknięty).

    P.S. Sam byś na to wpadł piorunem, gdybyś stosował wcięcia ;)
  • #5 16307492
    zbysiomysio
    Poziom 6  
    Posty: 249
    Ocena: 40
    To też, ale brakowało też zamknięcia If. Pokazuje mi jednak błąd 438 i podświetla mi linijki kodu:
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 16307509
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Zobacz z wcięciami
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    Oznaczyłem komentarzami dlaczego 'with fd-end with' tak, a nie inaczej
    wyszło dodatkowo:
    -otwarty blok if Show = -1 (zbędne w tej postaci)
    -wyłączone odświeżanie (brak linii z przełącznikiem = True)

    Bloków nie można przeplatać. Jeśli otwierasz w jakiejś kolejności, zamykasz w odwrotnej, Np

    With Sheets(1): For i = 1 To 2: Do
    coś sie tu dzieje
    Loop: Next: End With
  • #7 16307525
    zbysiomysio
    Poziom 6  
    Posty: 249
    Ocena: 40
    Dzięki. Niestety podświetla mi błąd w tych linijkach, o których napisałem powyżej. Chyba coś żle zdefiniowałem. Chodziło o to, aby przed pętlą wyczyściło wszystkie arkusze od I L do IXL i zdjęło ewentualny filtr
  • REKLAMA
  • Pomocny post
    #8 16307539
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Zmienna 'tblArkusze' jest tablicą przecież. Musisz w pętli
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • #9 16307573
    zbysiomysio
    Poziom 6  
    Posty: 249
    Ocena: 40
    Teraz pokazuje mi błąd w tej linijce
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    Odrzuciłem na razie sprawę formuł i sprawdzania poprawności. Teraz to makro wygląda j.n.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    Jednak pokazuje mi błąd w linijce wymienionej powyżej.Wiem, że coś jest źle, ale nie potrafię znaleźć błędu. Makro powinno kolejno odkrywać arkusze od "I L" do "IX L"i wklejać do nich kolumny A:N z otwieranych plików.
  • Pomocny post
    #10 16308077
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Witam

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    Masz błąd bo musisz określić którego skoroszytu to dotyczy
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #11 16308167
    zbysiomysio
    Poziom 6  
    Posty: 249
    Ocena: 40
    clubs napisał:
    Witam


    Masz błąd bo musisz określić którego skoroszytu to dotyczy
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
    Dzięki. Rzeczywiście to pomogło. Dodatkowo okazało się, że musi być
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
    > Zauważyłem natomiast, że makro nie kopiuje z plików, w których jest ustawiony widok podziału stron. Jak jest ustawiony normalny widok to kopiuje. Jak można zrobić, aby przed koiowaniem makro sprawdziło jaki jest ustawiony widok i ustawiało na widok normalny przed kopiowaniem

    Dodano po 1 [godziny] 50 [minuty]:

    Wszystko jednak ok. To coś komputer wywinął figiel. Dzięki wszystkim. Zamykam temat. Sprawa rozwiązana

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał rozwiązania dla makra w Excelu, które umożliwiłoby kopiowanie danych z wielu plików do arkuszy o nazwach od "I L" do "IX L". Makro miało automatycznie czyścić te arkusze przed kopiowaniem oraz otwierać pliki w kolejności alfabetycznej. W trakcie dyskusji pojawiły się problemy z błędami w kodzie, takie jak brakujące zakończenia bloków 'If' i 'With', a także błędy związane z widocznością arkuszy. Użytkownicy sugerowali poprawki, w tym użycie pętli do czyszczenia arkuszy oraz określenie, do którego skoroszytu odnoszą się operacje. Ostatecznie użytkownik rozwiązał problem z kopiowaniem, a także z widokiem arkuszy, który wpływał na działanie makra.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA