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 (VBA) - kopiowanie zawartości otwartych plików Excela do innego pliku

06 Lut 2019 14:33 594 7
  • Poziom 2  
    Hej, szukam rozwiązania następującego problemu:
    - jest sobie kilka plików Excela o tej samej strukturze w jednym katalogu. Chciałbym skopiować zawartość OTWARTYCH plików do innego, nowego pliku i go zapisać.
    Niestety moja znajomość VBA jest bardzo słaba, czy ktoś potrafi mi pomóc?
  • Poziom 10  
    Czyli otwierasz kilka plików / skoroszytów (worksheets) o takiej samej konstrukcji z interesującymi danymi w takich samych arkuszach (sheet) i chcesz zawartość całych arkuszy przenieść do nowego skoroszytu? Czy tylko jakiś zakres (range).
  • Poziom 2  
    Tak, w każdym pliku jest jeden skoroszyt o tej samej konstrukcji - sporo wierszy, kilka kolumn wypełnionych danymi. W plikach może być różna ilość danych. Całość chcę kopiować do jednego pliku (dane z jednego, później kolejne wiersze z drugiego, itd.)
  • Poziom 10  
    OK. Nie napiszę gotowca i zachęcam do pisania samemu. Większa satysfakcja i coś się można nauczyć. Struktura jest taka, że są obiekty Application, Workbook, Sheet. W takiej hierarchii. W Excelu, edytorze VB użyj narzędzia ObjectBrowser.
    Wybierasz z listy gdzie jest "All libraries" Excel. Na liście Classes masz klasy obiektów z danej biblioteki. Wybierasz np Application czyli aplikację którą domyślnie jest Excel. Bo jakbyś to robił z poziomu Oulooka to trzeba by załadować do References bibliotekę Excel i używać Excel.'i coś tam'. Po prawej są elementy z danej klasy. Różnego rodzaju . Te z piorunem to zdarzenia, takie z rączką i tabliczką to Propertys - cechy, te z czymś to polecenia.
    Np application.openworkbook odwołuje się do aktualnie otwartego skoroszytu, openworkbook.sheets to listy arkuszy w skoroszycie. itp. Tak działa VB czy samodzielnie czy jako VBA. A jak z listy po lewej wybierzesz Workbook to po prawej masz wszystko co można zrobić w ramach Workbook. Między innymi polecenie MergeWorkbook. I pod spodem wyjaśnienie jak używać "Sub MergeWorkbook(Filename)". Czyli trzeba znać ścieżkę do pliku. Można używać klasy Sheet do której należą np Add, Copy itp.
    Sorki za przydługi wykład. Miłej zabawy.
    Na koniec: https://www.extendoffice.com/documents/excel/456-combine-multiple-workbooks.html.
    Ale to na koniec, tam jest kawałek w VB. Mam nadzieję, że polubisz VB.
    PS
    Jeszcze zapomniałem, że musisz otworzyć oddzielny moduł do trzymania swojej funkcji. Project -> Insert -> Module. Można zamiast module UserForm i funkcję uruchomić zdarzeniem np CommandButton_Click. Potem w ramach potrzeb można dodawać listę plików do połączenia, pasek postępu itp.

    Dodano po 24 [minuty]:

    Miałem tego nie robić ale 60 sek wolnego więc:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 23  
    Słaby pomysł z tym oknem dialogowym - trzeba się naklikać i to niepotrzebnie chyba, bo kolega napisał, że ma już otwarte pliki.
    Z innej beczki:
    1. Jak wybrać te pliki? Mają może jakąś charakterystyczną część nazwy? Nie może to być taka sama nazwa jeżeli są jednocześnie otwarte.
    2. Jak zidentyfikować arkusz do kopiowania? Może być stała nazywa, albo stałe położenia.
    3. Gdzie są te dane? Od której komórki się zaczynają i ile jest kolumn.
    4. Liczbę wierszy jak rozumiem trzeba sobie wyliczyć, do tego potrzebna jest kolumna wypełniona w 100%, bez pustych wartości w wierszach, gdzie są dane.
    5. Czy chcesz dodać jakieś dane oprócz tych skopiowanych? Często dodaje się np. nazwę pliku skąd dane pochodzą.
    Algorytm w skrócie będzie taki:
    1. wchodzisz do każdego pliku źródłowego
    2. oznaczasz dane do skopiowania (select tylko podczas uruchamiania)
    3. kopiujesz dane do schowka (bezpośrednio do innego pliku się nie da o ile pamiętam)
    4. Przechodzisz do swojego pliku i wklejasz dane
  • Poziom 38  
    Cytat:
    Miałem tego nie robić ale 60 sek wolnego więc


    Więc użyłem kopiuj/wklej. Link
  • Poziom 10  
    kinggustav napisał:
    Słaby pomysł z tym oknem dialogowym - trzeba się naklikać i to niepotrzebnie chyba, bo kolega napisał, że ma już otwarte pliki.


    Zrobiłem copy paste co PRL doskonale wychwycił. Obiecuję kolejne listingi umieszczać w okienku. Albo linku. Bity na dyskach też są cenne.

    Chodziło mi tylko o zasygnalizowanie możliwości, nie przewidywanie co użytkownik ma, gdzie i w jakiej formie. Skupiłem się na opisie możliwości rozwiązania skopiowania identycznych arkuszy z kilku plików do jednego.
    PS
    Kolega napisał, że "jest sobie kilka plików", a ja dopytałem "otwierasz kilka plików". To różnica :)