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

Excel - makro jak zrobić? - jak kopiować dane w prosty sposób?

Kordi888 03 Sty 2019 13:46 705 17
REKLAMA
  • #1 17672655
    Kordi888
    Poziom 6  
    Posty: 8
    Witam wszystkich użytkowników,
    mam sprawę która sprawia mi problem, chodzi o kopiowanie przy pomocy makra danych z kolejnych plików.

    Chodzi o to że do pliku ZBIORCZY.XLSX kopiujemy wiersz A2 z plików 1_19, 2_19, 3_19, ..., n_19. Pliki o nazwach 1_19, 2_19, 3_19, ..., n_19 umieszczane są w folderze TEST. Pliki te będą tworzone i umieszczane w katalogu z różną częstotliwością. Zależałoby mi na tym aby makro powodowało kopiowanie danych z kolejnych umieszczanych plików, najlepiej nie otwierając już tych które były wcześniej skopiowane.

    Makra które do tej pory testowałem sprawiają różne problemy. Główne problemy jakie napotkałem do tej pory w znalezionych makrach to:
    - podczas kopiowania kasowanie z każdym wierszem jednej kolumny (przesuwanie w lewo);
    - po każdym uruchomieniu makra kopiowanie już skopiowanych plików do pierwszego wolnego wiersza;
    - otwieranie wszystkich umieszczonych i już skopiowanych plików na nowo (przy większej ilości zajmuje to sporo czasu).

    Cytat:
    Sub przegladaniePlikowZkatalogow()

    Dim sciezka As String
    Dim nazwa As String
    Dim pierwszyWolnyWiersz As Integer

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    pierwszyWolnyWiersz = 3
    sciezka = "C:\Users\Łukasz\Desktop\test\"

    nazwa = Dir(sciezka & "*a1*_19*.xlsx*", vbNormal)

    Do While nazwa <> ""
    Workbooks.Open sciezka & nazwa

    Worksheets("Arkusz2").Activate
    Range("A3:BJ3").Copy

    ThisWorkbook.Sheets("Arkusz1").Range("A" & pierwszyWolnyWiersz).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False



    ActiveWorkbook.Close False
    pierwszyWolnyWiersz = Range("A" & Rows.Count).End(xlUp).Row + 1
    nazwa = Dir

    Loop

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    End Sub


    Sprawa jest na pewno prosta, ale nie mam absolutnie żadnej potrzebnej wiedzy z tego zakresu aby coś z tym zrobić.

    Będę wdzięczny za pomoc w tej sprawie! :)
  • REKLAMA
  • #2 17678264
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Kordi888 napisał:
    kopiujemy wiersz A2
    A2 to jest komorka
    Jaky rzeczywisty zakres Chcesz kopiowac z kazdego pliku?
  • #3 17678490
    Kordi888
    Poziom 6  
    Posty: 8
    To jest wiersz drugi, cały. W pierwszym jest nagłówek tabeli.
  • #4 17678739
    yogi009
    Poziom 43  
    Posty: 14697
    Pomógł: 848
    Ocena: 2650
    Zacząłbym od porządnego nauczenia się prawidłowej nazwy tego programu.
  • #5 17678778
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    1. Trzeba miec w pliku ZBIORCZY.XLSX dodatkowy arkusz, gdzie bedzie zapisywane nazwy pikow ktorze juz wczytane. np. Arkusz2
    2. Ten szablon "*a1*_19*.xlsx*" zgodnie z tym, jakie pliki trzeba otwierzac??

    Dodano po 5 [minuty]:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 17681106
    Kordi888
    Poziom 6  
    Posty: 8
    Czy mógłbym prosić o sprecyzowanie drugiego pytania?
    Pozdrawiam
  • REKLAMA
  • #7 17681128
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Porownaj
    Kordi888 napisał:
    sciezka & "*a1*_19*.xlsx*",

    Kordi888 napisał:
    z plików 1_19, 2_19, 3_19, ..., n_19

    Jakie rzeczywiste nazwy plikow?
  • REKLAMA
  • #8 17681163
    Kordi888
    Poziom 6  
    Posty: 8
    Rzeczywiste nazwy plików przyjmijmy że będą 1_19, 2_19, 3_19, ... n_19. Jak widać będzie się zmieniała pierwsza liczba , "19" będzie stałą wartością.
    Przepraszam ale w toku prac gdzieś te nazwy się zmieniały stąd ta niekonsekwencja.

    Kolego yogi009, dziękuję za uwagę. Jest to literówka związana z tym iż w mojej pracy często używa się nazwy całkiem niezwiązanego z Excelem produktu Exel.
  • #9 17681376
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    f = Dir("*_19.xlsx")

    Zmien
    If Application.CountIf(ree, f) = 0 Then
    na
    If Application.CountIf(ree, f) = 0 AND ((f Like "#_19.xlsx") OR (f Like "##_19.xlsx")) Then
  • #10 17681953
    Kordi888
    Poziom 6  
    Posty: 8
    Kod jest taki jak poniżej. Niestety po włączeniu makra nic się nie dzieje.

    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
    [/code]
  • Pomocny post
    #11 17682060
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Dodaj Swoja sciezka w Dir, jak w post #1

    Dodano po 4 [minuty]:

    lub przed wlanczeniem makra zrob "Plik - Otworz" wejdz w folder z plikami - "Esc"(Odmiana)
  • #12 17682733
    Kordi888
    Poziom 6  
    Posty: 8
    Jest postęp :) Makro działa ale po włączeniu pokazuje się błąd "400". Do kolejnego wiersza arkusza 2 wkleja się nazwa pliku który jest obecny w katalogu i jego struktura nazwy jest zgodna z tą opisaną w kodzie.

    Teraz tylko pytanie, jak dalej zrobić aby kopiować zawartość wiersza nr 2 z pliku 1_19, 2_19, ... n_19 do tego pliku zbiorczego?
  • #13 17683286
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Podaj pelna nazwa tego chytrego pliku "1_19". jest to excel'owsky?
    Oprocz blad 400 jest komunikat? Jaky?
  • #14 17683331
    Kordi888
    Poziom 6  
    Posty: 8
    1. Ten 1_19, 2_19, ..., n_19 itd. to oddzielne pliki xlms
    2. Nie ma żadnego innego komunikatu
  • REKLAMA
  • #15 17683360
    JRV
    Specjalista - VBA, Excel
    Posty: 2724
    Pomógł: 805
    Ocena: 455
    Tj .XLSM ? z makrami?
  • #16 17685082
    Kordi888
    Poziom 6  
    Posty: 8
    Makro jest w pliku ZBIORCZY.XLSM. Te 1_19, 2_19, ..., n_19 nie mają w sobie makra. Z nich makro napisane w pliku ZBIORCZY.XLSM kopiuje do pliku ZBIORCZY.XLSM wiersz nr 2 z Arkusza 1.
  • #17 17687114
    MistrzJaśko
    Poziom 6  
    Posty: 15
    Zawsze możesz też zrobić tak aby Makro pytało Ciebie przy odpaleniu z jakiego pliku zewnętrznego ma kopiować jaki zakres danych.
  • #18 17689550
    lanzul
    Poziom 30  
    Posty: 1023
    Pomógł: 199
    Ocena: 123
    Kordi888 napisał:
    ... Makro działa ale po włączeniu pokazuje się błąd "400" ...

    Wejdź do modułu z kodem i przy użyciu klawisza "F8" przejdź całe makro linijka po linijce, tam gdzie wystąpi błąd zrób zrzutkę i załącz.

    Ps.:
    A czy nie lepiej po odczycie danych z konkretnego pliku, odkopiowywać taki plik (kodem vba) do podkatalogu ? Nie trzeba wtedy żadnych "ksiąg" z nazwami prowadzić.

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w stworzeniu makra w Excelu, które automatycznie kopiuje dane z wiersza A2 z plików o nazwach 1_19, 2_19, 3_19 itd., znajdujących się w folderze TEST, do pliku ZBIORCZY.XLSX. Problemy, które napotkał, to m.in. przesuwanie kolumn, ponowne kopiowanie już skopiowanych plików oraz otwieranie wszystkich plików na nowo. Uczestnicy dyskusji sugerują dodanie arkusza do przechowywania nazw już wczytanych plików oraz modyfikację kodu makra, aby uniknąć błędów i poprawić jego działanie. Użytkownik potwierdza, że pliki 1_19, 2_19 itd. są plikami XLSM, a makro działa w pliku ZBIORCZY.XLSM.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA