Operacje na plikach

Jedną z ciekawszych rzeczy, które można robić dzięki makrom to edytowanie innych plików. Plik można otworzyć do odczytu, lub do zapisu. Poniższy Listing przedstawia procedurę, która zapisuje do pliku C:\Temp\Liczby.txt kolejne liczby znajdujące się w komórkach A1:A10 w aktywnym arkuszu.

Sub PlikZapis()
    Dim a As Long
    Dim Liczba As Single
    
    Open "C:\Temp\Liczby.txt" For Output As #1
    For a = 1 To 10
        Liczba = Cells(a, 1)
        Print #1, Liczba
    Next a
    Close #1
End Sub

Instrukcja Open otwiera plik. Parametr Output określa, że plik zostanie otworzony do zapisu i jeśli wcześniej plik istniał, to zostanie nadpisany. Gdybyśmy zamiast Output użyli parametru Append, to w przypadku istnienia pliku dane zostaną dopisane na jego końcu. Parametr #1 oznacza numer uchwytu (gdybyśmy chcieli operować na kilku plikach jednocześnie, to podczas otwierania kolejnego pliku należy mu nadać kolejny numer). Następnie w pętli for odczytujemy wartość aktualnej komórki a instrukcja Print zapisuje wartość do pliku. Na końcu instrukcja Close zamyka plik i zwalnia zasoby.

Odczytanie danych z plików jest równie proste. Poniższy Listing przedstawia procedurę, która odczytuje 10 pierwszych liczb z pliku i wstawia je do kolejnych komórek. Instrukcja Open otwiera plik. Parametr Input oznacza, że otwieramy plik do odczytu. Następnie w pętli for za pomocą instrukcji Input odczytujemy kolejne wartości, które wstawiamy do kolejnych komórek. Na końcu instrukcja Close zamyka plik i zwalnia zasoby.

Sub OdczytPlik()
    Dim a As Long
    Dim Liczba As Single
    
    Open "C:\Temp\Liczby.txt" For Input As #1
    For a = 1 To 10
        Input #1, Liczba
        Cells(a, 1) = Liczba
    Next a
    Close #1
End Sub

Oprócz odczytywania danych z plików i zapisywania do plików można również wykonywać czynności administracyjne:

Sub OperacjeNaPlikach()
    'Skopiuj plik
    FileCopy "c:\temp\plik.txt", "c:\temp\plik2.txt"
    FileCopy "c:\temp\plik.txt", "d:\plik.txt"
    
    'Zmiana nazwy pliku
    Name "c:\temp\plik2.txt" As "c:\temp\nowa_nazwa.txt"
    
    'Przenieś plik do innego folderu
    Name "c:\temp\nowa_nazwa.txt" As "d:\nowa_nazwa.txt"
        
    'Skasuj plik
    Kill "d:\nowa_nazwa.txt"
    
    'W folderze c:\temp utwórz nowy pusty folder
    ChDrive ("c:\") 'Zmień dysk na C:\
    ChDir ("c:\temp") 'Przejdź do folderu c:\temp
    MkDir "Nowy pusty folder"
    
    'lub
    MkDir ("c:\temp\Nowy pusty folder2")
    
    'Zmień nazwę folderu
    Name "c:\temp\Nowy pusty folder2" As "c:\temp\Nowy pusty folder2-2"
    
    'Usuń folder (można kasować tylko puste foldery)
    RmDir ("c:\temp\Nowy pusty folder2-2")

    'Uruchom program kalkulator    
    Shell "calc.exe"
    
    'Sprawdź czy istnieje plik
    If Dir("c:\temp\plik.txt") <> "" Then MsgBox "Plik istnieje", vbInformation
    
    'Sprawdź czy istnieje folder (musi być na końcu znak \ !!)
    If Dir("c:\temp\") <> "" Then MsgBox "Folder temp istnieje", vbInformation
End Sub

Wróć do spisu treści