ID tematu: 27925
 |
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
|
|
|
 |
|
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
|
|
|
 |
|
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 |
|
 | ID posta:
148092
|
|
|
 |
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
|
|
|
 |
|
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
|
|
|
 |
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
|
|
|
 |
|
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
|
|
|
 |
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
|
|
|
 |
|
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
|
|
|
 |
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
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
|
|