Firma Aktualności Produkty Projekty Teksty Muzeum Pobierz Kontakt Mapa RSS English
YAC Software Teksty Excel Otwórz wszystkie i połącz Spelunka Trybików
  Wróć

Spis

Dane

Excel

Badania mediów

Badania rynku

Kwoty respondentów

SPSS

VBA

YAC Data Language

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

Dodaj komentarz (pola z gwiazdką są obowiązkowe)
Imię / ksywa *
Mail (pozostanie ukryty) *
Twoja strona
Komentarz (bez tagów) *
Wpisz tekst wyświetlony poniżej *
 

Góra

Tagi

Excel

VBA


Podobne strony

Usuwanie labelek małych wartości z wykresów Excela

Usuwanie labelek małych wartości z wykresów PowerPointa

Wyszukiwanie wartości w tablicach 2D

Odwołania do komórek w Excelu