|
|
Otwórz wszystkie i połącz |
|
Któregoś dnia przeglądałem logi Apache'a aby sprawdzić,
które zapytania w wyszukiwarkach internetowych prowadzą do tych stron.
Okazało się, że było wiele pytań dotyczących makr,
które łączyłyby wiele plików w jeden skoroszyt (workbook) Excela.
Co prawda, już jakiś czas minął od kiedy pisałem coś w Visual Basicu (for Applications),
ale korzystając z nieocenionej funkcji rejestracji makr w Excelu,
można dosyć szybko dojść do tego, jak takie makro powinno wyglądać
(tak przy okazji: jeżeli szukasz tej funkcji w Excelu 2007, przejdź na zakładkę Widok -
przycisk do obsługi makr jest ostatnim przyciskiem po prawej;
naciśnij na strzałkę w dół - tam pojawi się menu Rejestruj Makro).
Option Explicit
Sub OpenAll()
Dim LDir, LFile, LDest As String
Dim LCount, LIndex As Integer
LDir = "c:\_test\"
LFile = Dir(LDir & "*.xls")
LDest = "Zeszyt0.xls"
LCount = Workbooks(LDest).Sheets.Count
While LFile <> ""
If UCase(LFile) <> UCase(LDest) Then
Workbooks.Open Filename:=(LDir & LFile)
For LIndex = 1 To Workbooks(LFile).Sheets.Count
Workbooks(LFile).Sheets(1).Move After:=Workbooks(LDest).Sheets(LCount)
LCount = LCount + 1
Next LIndex
End If
LFile = Dir()
Wend
End Sub
W powyższym kodzie wpisałem explicite nazwę folderu i maskę plików, tudzież nazwę skoroszytu docelowego -
chyba pozostawię czytelnikowi, jako zadanie, wczytanie tych parametrów np. z okien dialogowych
lub ich inicjalizację w dowolny inny sposób. :-)
Kilka słów wyjaśnienia:
-
W powyższym przykładzie, skoroszyt docelowy powinien być już otwarty
(inaczej Workbooks(LDest) będzie powodowało błąd;
można skorzystać z funkcji Workbooks.Open aby otworzyć skoroszyt docelowy).
-
Pierwsze wywołanie Dir() zwraca nazwę pierwszego pliku pasującego do maski podanej jako parametr;
kolejne wywołania Dir(), bez podawania parametrów, zwracają nazwy kolejnych plików pasujących do tej maski;
jeżeli brak takich plików, Dir() zwraca tekst pusty.
-
Workbooks.Open otwiera plik i stara się odgadnąć, w jakim formacie ten plik jest.
Jeżeli są z tym jakieś problemy, zarejestruj makro w czasie ręcznego otwierania problematycznego pliku
i sprawdź, jakie parametry Excel wybrał; tudzież można oblookać inne funkcje otwierające pliki,
np. OpenText (która ma dodatkowe parametry sterujące otwieraniem różnego rodzaju plików tekstowych).
-
Przed Workbooks.Open sprawdzamy, czy aby przypadkiem nie otwieramy już otwartego skoroszytu docelowego
(gdyby ten był już zapisany w katalogu źródłowym).
Korzystamy z funkcji UCase (zamiana liter na wielkie) aby nie było problemów z porównywaniem nazw plików
różniących się tylko wielkością liter (gdy np. LFile <> LDest by nie zadziałało).
-
Sheets(1).Move przenosi pierwszy arkusz otwartego pliku do skoroszytu docelowego i umieszcza go za podanych arkuszem
(dzięki LCount, arkusze dodawane są na koniec listy arkuszy skoroszytu docelowego w tej samej kolejności,
w której Dir() zwraca nazwy plików).
-
Przenoszenie w pętli robimy tyle razy, ile jest arkuszy w skoroszycie źródłowym.
Powoduje to, że wszystkie arkusze zostaną przeniesione do skoroszytu docelowego,
a skoroszyt źródłowy zostanie automatycznie zamknięty przez Excela.
Gdybyśmy nie przenosili wszystkich arkuszy (lub np. kopiowali arkusze),
skoroszyt źródłowy pozostałby otwarty -
wtedy można skorzystać z funkcji Close aby go zamknąć:
Workbooks(LFile).Close false
Parametr false powyżej powoduje, że skoroszyt zostaje zamknięty bez zapisywania zmian
(więc ze wszystkimi oryginalnie załączonymi arkuszami) i bez pytania o zapisywanie zmian.
HTH
Góra
|
Komentarze |
Kurczę! Na razie brak komentarzy...
|
|
Góra |
|
Góra
|
|
|