Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 27925 Skopiuj do schowka z kilku plików do jednego - każdy plik jako następny arkusz
Autor Wiadomość
Aisza
forumowicz


Posty: 15
Wysłany: 2012-02-08, 18:57   z kilku plików do jednego - każdy plik jako następny arkusz

Witam serdecznie
zwracam się do wszystkich, którzy mogliby pomóc mi w następującej sprawie:

- we folderze mam kilka skoroszytów excel - o różnej nazwie,
- w każdym z nich jest arkusz z nazwą "sprawozdanie", a w nim tabela w takim samym układzie,

i teraz pytanie: jakie makro pozwoli przenieść arkusz z nazwą "sprawozdanie" ze wszystkich skoroszytów w danym folderze, do jednego skoroszytu (np. zbiorówka)... z tym że każdy kopiowany arkusz będzie następnym arkuszem w tej "zbiorówce", a arkusze będą miały nazwy z kolejno pobieranych skoroszytów.

Nie ukrywam, że liczę na Waszą pomoc gdyż kopiowanie na piechotę, nadawanie nazw...powoli mnie wykańcza :)
Z góry dziękuję
ID posta: 147932 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

negatyv
Excel Expert



Zaproszone osoby: 4
Pomógł: 195 razy
Posty: 910
Wysłany: 2012-02-09, 08:56   

Trochę to napisane na kolanie, ale może Ci pomoże. Osobiście wolę wskazywać pliki, niż po prostu ładować wszystkie z katalogu.

Kod:
Option Explicit


Sub Zestawieniedanych()

Dim FileList, MyFile
Dim InputFile As Workbook
Dim MySheet As Worksheet
Dim MyWorkbook As Workbook

Set MyWorkbook = ActiveWorkbook
FileList = Application.GetOpenFilename("Excel (*.xls),*.xls", , "wybierz dane", , True)
     
    For Each MyFile In FileList
        Set InputFile = Workbooks.Open(MyFile, 0, True)
        For Each MySheet In InputFile.Worksheets
            If MySheet.Name = "sprawozdanie" Then
                MyWorkbook.Sheets.Add after:=MyWorkbook.Sheets(MyWorkbook.Sheets.Count)
                MyWorkbook.Sheets(MyWorkbook.Sheets.Count).Name = InputFile.Name
                MySheet.Range("A1:E10").Copy MyWorkbook.Sheets(MyWorkbook.Sheets.Count).Range("A1")
            End If
        Next
        Application.DisplayAlerts = False
        InputFile.Close False
        Set InputFile = Nothing
        Application.DisplayAlerts = True
    Next
   
End Sub
_________________
http://www.123office.pl - blog poświęcony programom pakietu MS Office.
ID posta: 147976 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

Aisza
forumowicz


Posty: 15
Wysłany: 2012-02-09, 21:32   

ogromne dzięki....działa superowo.. też chciałabym tak napisać szybko "na kolanie" jak kolega...:):):) i racja możliwość wyboru plików z folderu też ma pewne zalety.
A czy można tak przerobić makro żeby zawsze pobierało pierwszy arkusz z każdego skoroszytu - niezależnie od jego nazwy?

jeszcze raz baaardzo dziękuję... moja skóra uratowana :clap
ID posta: 148092 Skopiuj do schowka
 
 
negatyv
Excel Expert



Zaproszone osoby: 4
Pomógł: 195 razy
Posty: 910
Wysłany: 2012-02-09, 22:00   

To fajnie, szkoda by było twojej skóry :)

Poszukaj jak działa pętla for each i zastanów się nad tą pętlą:

Kod:
For Each MySheet In InputFile.Worksheets
_________________
http://www.123office.pl - blog poświęcony programom pakietu MS Office.
ID posta: 148096 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

Aisza
forumowicz


Posty: 15
Wysłany: 2012-02-12, 13:50   

no właśnie szukam ale widać nie skutecznie...
nie mogę znaleźć jak powinien wyglądać zapis makra gdy dane maja być pobierane z pierwszego arkusza niezależnie od jego nazwy If MySheet.Name = "sprawozdanie" Then
nie dźwignę:(

bardzo proszę o pomoc
ID posta: 148428 Skopiuj do schowka
 
 
negatyv
Excel Expert



Zaproszone osoby: 4
Pomógł: 195 razy
Posty: 910
Wysłany: 2012-02-12, 17:17   

Do arkuszy możesz się odwoływać przez nazwę:
Kod:
InputFile.Worksheets("sprawozdanie")


lub po prostu przez jego kolejność w pliku:
Kod:
InputFile.Worksheets(1)


Więc to:
Kod:
        For Each MySheet In InputFile.Worksheets
            If MySheet.Name = "sprawozdanie" Then
                MyWorkbook.Sheets.Add after:=MyWorkbook.Sheets(MyWorkbook.Sheets.Count)
                MyWorkbook.Sheets(MyWorkbook.Sheets.Count).Name = InputFile.Name
                MySheet.Range("A1:E10").Copy MyWorkbook.Sheets(MyWorkbook.Sheets.Count).Range("A1")
            End If
        Next


zamień na:

Kod:
   
            MyWorkbook.Sheets.Add after:=MyWorkbook.Sheets(MyWorkbook.Sheets.Count)
            MyWorkbook.Sheets(MyWorkbook.Sheets.Count).Name = InputFile.Name
           InputFile.Worksheets(1).Range("A1:E10")).Copy MyWorkbook.Sheets(MyWorkbook.Sheets.Count).Range("A1")
           
_________________
http://www.123office.pl - blog poświęcony programom pakietu MS Office.
ID posta: 148452 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

Aisza
forumowicz


Posty: 15
Wysłany: 2012-02-12, 19:00   

bardzo Ci serdecznie dziękuję!!!
za cierpliwość i wyjaśnienie .....:)
pozdrówka
ID posta: 148480 Skopiuj do schowka
 
 
Majster86 
słuchacz


Posty: 14
Wysłany: 2012-02-17, 17:07   

Witam, Aisza działa Ci to makro? Próbowałem to zrobić, skopiowałem cały kod do edytora VBA i niby działa jednak nie do końca tak jak jest to napisane, jeżeli w plikach mam wszystkie arkusze o tej samej nazwie to bardzo ładnie je kopiuje ale jeżeli arkusze mają już inne nazwy to makro nie działa. Jako że chcę się nauczyć VBA to kombinowałem jak to zrobić żeby działało ale nic z tego :( czy może mi ktoś pomóc jak zrobić żeby kopiował arkusze z różnymi nazwami z rożnych plików do jednego ?
ID posta: 149280 Skopiuj do schowka
 
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

negatyv
Excel Expert



Zaproszone osoby: 4
Pomógł: 195 razy
Posty: 910
Wysłany: 2012-02-17, 19:07   

Reklamy w stopce są niezgodne z regulaminem, usuń to zanim dostaniesz ostrzeżenie.
Algorytm kopiuje z pierwszego arkusza:

Kod:
InputFile.Worksheets(1).Range("A1:E10")).Copy


Nie ma prawa działać inaczej, musiałeś coś źle przepisać. Najlepiej podaj swój cały kod w nowym poście i napisz jak według Ciebie powinien działać i jak działa.
_________________
http://www.123office.pl - blog poświęcony programom pakietu MS Office.
ID posta: 149284 Skopiuj do schowka
 
 
Majster86 
słuchacz


Posty: 14
Wysłany: 2012-02-17, 23:34   

Ok usunięte :)

właśnie skopiowałem dokładnie cały kod z tego przykładu najpierw z 1 części i później tej poprawionej która miała kopiować pierwszy arkusz z wybranych skoroszytów i jak maja swoje różne nazwy to nie kopiuje ich. Wiem że ta linia odpowiada za kopiowanie arkusza pierwszego ale jednak coś mi nie śmiga :(
ID posta: 149302 Skopiuj do schowka
 
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum