Czy możliwy zapis do pliku tekstowego


Funkcja czyMozliwyZapisDoPlikuTekstowego korzysta podczas działania z innych nie-wbudowanych funkcji prezentowanych na tej stronie, które w związku z tym również muszą być umieszczone w kodzie projektu dla prawidłowego działania tej funkcji.

Nie uwzględnienie ich w kodzie spowoduje wygenerowanie błędu: Compile error: Sub or Function not defined.

Dodatkowe funkcje wykorzystywane w funkcji czyMozliwyZapisDoPlikuTekstowego zostały wymienione poniżej. Klikając w nazwę każdej z nich przeniesiesz się do podstrony zawierającej jej kod:

Dodając powyższe funkcje, zwróć uwagę czy nie były one już wcześniej wykorzystywane w Twoim kodzie. Obecność w jednym projekcie VBA dwóch funkcji publicznych o identycznych nazwach spowoduje wygenerowanie błędu kompilacji o treści: Compile error: Ambiguous name detected: nazwa_funkcji.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
'**********************************************************************************************************
' Nazwa:                czyMozliwyZapisDoPlikuTekstowego
' Autor:                mielk | 2012-12-02
'
' Opis:                 Funkcja sprawdzająca czy możliwe jest zapisywanie danych do pliku tekstowego o
'                       podanej ścieżce. Jeżeli plik o takiej ścieżce jeszcze nie istnieje, funkcja
'                       sprawdza czy możliwe jest utworzenie pliku o takiej ścieżce.
'
' Argumenty:
'   sciezka             Ścieżka do pliku, która ma być sprawdzony przez funkcję.
'
' Zwraca:
'   Boolean             True - jeżeli możliwe jest zapisywania do pliku tekstowego o podanej ścieżce.
'                       False - jeżeli użytkownik nie ma uprawnień do zapisu w folderze, w którym znajduje
'                               się dany plik tekstowy lub plik ten nie istnieje, ale przy obecnym poziomie
'                               uprawnień niemożliwe jest jego stworzenie.
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2012-12-02        mielk           Utworzenie funkcji.
'**********************************************************************************************************
Public Function czyMozliwyZapisDoPlikuTekstowego(sciezka As String) As Boolean
    Const NAZWA_METODY As String = "czyMozliwyZapisDoPlikuTekstowego"
    'Stała definiująca dopuszczalne rozszerzenia plików tekstowych.
    Dim ROZSZERZENIE_TXT As Variant:        ROZSZERZENIE_TXT = Array("txt", "csv")
    '------------------------------------------------------------------------------------------------------
    Static objFSO As Object                 'Późne wiązanie pozwala korzystać z funkcji nawet jeżeli
                                            'nie jest załadowana biblioteka Microsoft Scripting Runtime.
    Dim strNazwaDysku As String
    Dim strFolderBazowy As String
    Dim strFolderNadrzedny As String
    Dim strRozszerzenie As String
    '------------------------------------------------------------------------------------------------------


    'Tworzy instancję klasy FileSystemObject, jeżeli nie została jeszcze stworzona. ---------------------|
    If objFSO Is Nothing Then                                                                           '|
        Set objFSO = VBA.CreateObject("Scripting.FileSystemObject")                                     '|
    End If                                                                                              '|
    '----------------------------------------------------------------------------------------------------|



    With objFSO

        'Sprawdź czy istnieje plik tekstowy o podanej ścieżce. Jeżeli tak sprawdź czy nie jest ----------|
        'chroniony przed zapisem.                                                                       '|
        If .FileExists(sciezka) Then                                                                    '|
                                                                                                        '|
            czyMozliwyZapisDoPlikuTekstowego = Not (VBA.GetAttr(sciezka) And VBA.vbReadOnly)            '|
                                                                                                        '|
        Else                                                                                            '|
                                                                                                        '|
            'Sprawdź czy istnieje dysk określony w podanej ścieżce. ---------------------------------|  '|
            strNazwaDysku = .GetDriveName(sciezka)                                                  '|  '|
            If .DriveExists(strNazwaDysku) Then                                                     '|  '|
                                                                                                    '|  '|
                'Sprawdź czy rozszerzenie podanego pliku jest zgodne z którymś ze textfile. -----|  '|  '|
                'zdefiniowanych rozszerzeń plików tekstowych.                                   '|  '|  '|
                strRozszerzenie = .GetExtensionName(sciezka)                                    '|  '|  '|
                If czyJestWTablicy(strRozszerzenie, ROZSZERZENIE_TXT, False) Then               '|  '|  '|
                                                                                                '|  '|  '|
                    'Uzyskaj folder bazowy tego pliku tekstowego. ---------------------------|  '|  '|  '|
                    strFolderNadrzedny = .GetParentFolderName(sciezka)                      '|  '|  '|  '|
                    strFolderBazowy = .GetParentFolderName(sciezka)                         '|  '|  '|  '|
                    Do Until .FolderExists(strFolderBazowy)                                 '|  '|  '|  '|
                        strFolderBazowy = .GetParentFolderName(strFolderBazowy)             '|  '|  '|  '|
                    Loop                                                                    '|  '|  '|  '|
                    '------------------------------------------------------------------------|  '|  '|  '|
                                                                                                '|  '|  '|
                                                                                                '|  '|  '|
                    '------------------------------------------------------------------------|  '|  '|  '|
                    If VBA.StrComp(strFolderBazowy, strFolderNadrzedny, vbTextCompare) = 0 _
                                                                                      Then  '|  '|  '|  '|
                        'Folder docelowy już istnieje.                                      '|  '|  '|  '|
                        czyMozliwyZapisDoPlikuTekstowego = _
                                              czyMozliwyZapisDoFolderu(strFolderNadrzedny)  '|  '|  '|  '|
                    Else                                                                    '|  '|  '|  '|
                        'Folder docelowy musi zostać stworzony.                             '|  '|  '|  '|
                        czyMozliwyZapisDoPlikuTekstowego = _
                                            czyMoznaDodawacPodfoldery(strFolderBazowy)      '|  '|  '|  '|
                    End If                                                                  '|  '|  '|  '|
                    '------------------------------------------------------------------------|  '|  '|  '|
                                                                                                '|  '|  '|
                                                                                                '|  '|  '|
                Else                                                                            '|  '|  '|
                                                                                                '|  '|  '|
                    'Rozszerzenie pliku nie pasuje do definicji pliku tekstowego.               '|  '|  '|
                    czyMozliwyZapisDoPlikuTekstowego = False                                    '|  '|  '|
                                                                                                '|  '|  '|
                End If                                                                          '|  '|  '|
                '---- [If .FileExists(sciezka) Then] --------------------------------------------|  '|  '|
                                                                                                    '|  '|
            Else                                                                                    '|  '|
                                                                                                    '|  '|
                'Dysk określony w podanej ścieżce nie istnieje.                                     '|  '|
                czyMozliwyZapisDoPlikuTekstowego = False                                            '|  '|
                                                                                                    '|  '|
            End If                                                                                  '|  '|
            '-------- [If .FileExists(sciezka) Then] ------------------------------------------------|  '|
                                                                                                        '|
        End If                                                                                          '|
        '------------ [If .FileExists(sciezka) Then] ----------------------------------------------------|

    End With


End Function