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