Poprawna nazwa arkusza


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
'**********************************************************************************************************
' Nazwa:                poprawnaNazwaArkusza
' Autor:                mielk | 2012-03-26
'
' Opis:                 Funkcja sprawdza czy przekazany ciąg tekstowy odpowiada wymogom, jakie muszą
'                       spełniać nazwy arkuszy Excela:
'                           *   nie może być pusta,
'                           *   jej długość nie może przekraczać 31 znaków,
'                           *   nie może zawierać żadnego z niedozwolonych znaków : ? / \ * [ ]
'                       Jeśli podana nazwa nie spełnia któregoś z tych wymogów, jest ona odpowiednio
'                       dostosowywana.
'
' Argumenty:
'   name                Tekst sprawdzany pod kątem poprawności jako nazwa arkusza.
'
' Zwraca:
'   String              Podana nazwa przekształcona w taki sposób, by była prawidłową nazwą arkusza Excela.
'                           *   Jeżeli wejściowa nazwa spełnia wymogi prawidłowej nazwy arkusza, jest ona
'                               zwracana w całości w nienaruszonym stanie.
'                           *   Jeżeli nazwa wejściowa jest pusta, zwracany jest znak podkreślenia (_).
'                           *   Jeżeli nazwa wejściowa jest dłuższa niż dopuszczalne 31 znaków, nadmiarowa
'                               część nazwy zostaje ucięta.
'                           *   Jeżeli nazwa wejściowa zawiera niedopuszczalne znaki : ? / \ * [ ], są one
'                               z niej usuwane.
'
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2012-03-26        mielk           Utworzenie funkcji.
'**********************************************************************************************************
Public Function poprawnaNazwaArkusza(name As String) As String
    Const NAZWA_METODY As String = "poprawnaNazwaArkusza"
    '------------------------------------------------------------------------------------------------------
    Const NIEDOZWOLONE_ZNAKI As String = ":?/\*[]"
    '------------------------------------------------------------------------------------------------------
    Dim intZnak As Integer
    Dim strZnak As String
    Dim strNiedozwoloneZnaki As String
    '------------------------------------------------------------------------------------------------------



    'Funkcja przechodzi przez wszystkie znaki w oryginalnej nazwie i usuwa z niej niedozwolone znaki. ---|
    For intZnak = 1 To VBA.Len(name)                                                                    '|
        strZnak = VBA.Mid$(name, intZnak, 1)                                                            '|
                                                                                                        '|
        '--------------------------------------------------------------------------------------------|  '|
        If VBA.InStr(1, strNiedozwoloneZnaki, strZnak) = 0 Then                                     '|  '|
            poprawnaNazwaArkusza = poprawnaNazwaArkusza & strZnak                                   '|  '|
        End If                                                                                      '|  '|
        '--------------------------------------------------------------------------------------------|  '|
                                                                                                        '|
    Next intZnak '---------------------------------------------------------------------------------------|


    'Sprawdza długość nazwy arkusza po usunięciu niedozwolonych znaków. Jeżeli jest ona za długa, -------|
    'nadmiarowe znaki są ucinane.                                                                       '|
    Select Case VBA.Len(poprawnaNazwaArkusza)                                                           '|
        Case Is > 31                                                                                    '|
            poprawnaNazwaArkusza = VBA.Left$(poprawnaNazwaArkusza, 31)                                  '|
        Case 0                                                                                          '|
            poprawnaNazwaArkusza = "_"                                                                  '|
    End Select '-----------------------------------------------------------------------------------------|

End Function