Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

03 Sty 2019 13:46 393 17
  • Poziom 4  
    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! :)
  • Specjalista - VBA, Excel
    Kordi888 napisał:
    kopiujemy wiersz A2
    A2 to jest komorka
    Jaky rzeczywisty zakres Chcesz kopiowac z kazdego pliku?
  • Poziom 4  
    To jest wiersz drugi, cały. W pierwszym jest nagłówek tabeli.
  • Specjalista - VBA, Excel
    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: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 4  
    Czy mógłbym prosić o sprecyzowanie drugiego pytania?
    Pozdrawiam
  • Specjalista - VBA, Excel
    Porownaj
    Kordi888 napisał:
    sciezka & "*a1*_19*.xlsx*",

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

    Jakie rzeczywiste nazwy plikow?
  • Poziom 4  
    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.
  • Specjalista - VBA, Excel
    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
  • Poziom 4  
    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
    Specjalista - VBA, Excel
    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)
  • Poziom 4  
    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?
  • Specjalista - VBA, Excel
    Podaj pelna nazwa tego chytrego pliku "1_19". jest to excel'owsky?
    Oprocz blad 400 jest komunikat? Jaky?
  • Poziom 4  
    1. Ten 1_19, 2_19, ..., n_19 itd. to oddzielne pliki xlms
    2. Nie ma żadnego innego komunikatu
  • Poziom 4  
    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.
  • Poziom 3  
    Zawsze możesz też zrobić tak aby Makro pytało Ciebie przy odpaleniu z jakiego pliku zewnętrznego ma kopiować jaki zakres danych.
  • Poziom 29  
    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ć.