Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 2
  • 1.1K

Witam,

 

potrzebuję makra, które wykonywałoby następujące operacje:

1. otwarcie pliku

2. modyfikacja danych, np. przekopiowanie wszystkich wierszy do pustego arkusza w nowym skoroszycie

3. zamknięcie pliku

 

w pętli dla wszystkich plików we wskazanym katalogu w następujących wariantach:

a) z zapisem zmian przy zamykaniu pliku

b) bez zapisu zmian przy zamykaniu pliku

c) bez względu na rozszerzenie pliku

d) tylko dla danego formatu pliku - .xls lub .xlsx

 

Z góry dziękuję!

 

Pozdrawiam,

 

Witia

Witold_Janyszek
  • Zapytał
  • @ Witold_Janyszek | 09.11.2015
    • 3
    • 0
    • 0

Odpowiedź (1)

  • 2

Dzień dobry panie Witku,

 

Fragment kodu otwierający i modyfikujący wszystkie pliki w folderze jest następujący:

Sub listaPlikow()

    Dim sciezka As String
    Dim i As Long
    Dim nowy_Plik_Z_Danymi As Workbook
    
    ChDir ThisWorkbook.Path
    sciezka = Dir("")
    
    Set nowy_Plik_Z_Danymi = Workbooks.Add
    
    i = 1
    Do Until sciezka = ""
    If Right(sciezka, 4) = "xlsx" Or Right(sciezka, 3) = "xls" Then
        Debug.Print sciezka
        Workbooks.Open ThisWorkbook.Path & "\" & sciezka
        nowy_Plik_Z_Danymi.Worksheets.Add
        ActiveWorkbook.ActiveSheet.UsedRange.Copy nowy_Plik_Z_Danymi.ActiveSheet.Range("A1")
        nowy_Plik_Z_Danymi.ActiveSheet.Name = ActiveWorkbook.ActiveSheet.Name
        ActiveWorkbook.Close
        i = i + 1
    End If
    sciezka = Dir
    Loop
    
    nowy_Plik_Z_Danymi.SaveAs ThisWorkbook.Path & "\" & "Nowy plik.xlsx", xlOpenXMLWorkbook

End Sub

 

Odnośnie punktów a-d:

Jeśli chcemy zapisać plik lub nie to ustawmy sobie zmienną albo zapytajmy użytkownika albo przekażmy to w formie parametru. I dodajmy (lub nie) linię jakikolwiek_plik_do_zapisu.save

Jeśli chcemy, żeby program otwierał pliki z konkretnym rozszerzeniem, albo wszystkie to i tak musimy sprawdzić rozszerzenie - a to już mamy na przykładzie plików xlsx i xls w kodzie. Znowu jak wyżej - wystarczy wybrać ifem lub selectem czy innym sposobem czy chcemy otwierać wszystkie pliki excela czy tylko konkretne.

 

Pozdrawiam,

Marek Krawczyk

  • Odpowiedział
  • @ | 11.11.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Działa - dzięki za odpowiedź!

Mógłbym jeszcze prosić o wyjaśnienie jak działa funkcja Dir? Nie do końca rozumiem działanie dwóch linii kodu:
sciezka = Dir("")
...
sciezka = Dir

I ostatnie pytanie: Do czego służy zmienna i? Bez niej makro działa tak samo.

Pozdrawiam,

Witek Janyszek
Skomentował : @ Witold_Janyszek ,12.11.2015
  • 3
  • 0
  • 0
Pierwsza komenda
sciezka = Dir("")
znajduje nazwę pierwszego pliku w aktualnym katalogu (aktualny katalog został ustawiony wcześniej poprzez chdir).

Linia kodu:
sciezka = Dir
to po prostu wybranie kolejnego pliku w tym samym folderze. Wszystko dzieje się dopóki ścieżka nie będzie pusta (co oznacza, że nie ma już plików w tym katalogu).

Co do zmiennej i to faktycznie - to pozostałość po fragmencie, którego używałem do wyświetlenia sobie nazw plików w kolejnych komórkach. Jak najbardziej do usunięcia.

Pozdrawiam,
Marek Krawczyk
Skomentował : @ TRENER ALTKOM AKADEMII ,12.11.2015