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
'**********************************************************************************************************
' Nazwa: dodajWiodaceZera
' Autor: mielk | 2012-02-12
'
' Opis: Funkcja dodająca do podanej liczby odpowiednią liczbę wiodących zer.
'
' Argumenty:
' wartosc Liczba bazowa, do której mają zostać dodane wiodące zera.
' * Część ułamkowa liczby bazowej i znak minus są ignorowane.
' * Jeżeli podany argument nie jest liczbą i niemożliwe jest jego przekonwertowanie
' na liczbę, zwracana jest tekstowa reprezentacja tego argumentu, a jeśli jest to
' niemożliwe (np. podany argument jest tablicą lub obiektem), zwracany jest wyjątek
' NieprawidlowyTyp.
' dlugosc Opcjonalny argument liczbowy, który określa minimalną liczbę znaków tekstu
' wynikowego.
' * W przypadku argumentów dłuższych niż oczekiwana długość tekstu wynikowego,
' argument bazowy zwracany jest w całości (jeśli przykładowo argument wynosi 1000,
' a długość tekstu wynikowego, określona przez argument [ileZnakow], powinna
' wynosić 2, i tak zwrócony zostanie tekst 1000, składający się z 4 znaków).
' * Domyślna wartość tego parametru wynosi 2.
'
' Zwraca:
' String Tekst składający się z liczby bazowej, przekazanej jako argument [wartosc] oraz
' takiej ilości wiodących zer, aby wynikowy tekst posiadał liczbę znaków określoną
' przez argument [ileZnakow].
'
' Wynikowy tekst może przekraczać żądaną długość, jeżeli bazowa liczba posiada
' więcej znaków niż wynosi argument [ileZnakow] - w takiej sytuacji liczba bazowa
' nie jest skracana, ale zwracana w całości.
'
' Jeżeli przekazany do funkcji argument nie jest liczbą i nie może być
' przekonwertowany na liczbę, zwracana jest jego reprezentacja tekstowa. Jeżeli
' uzyskanie tekstowej reprezentacji tego argumentu jest niemożliwe (np. jest on
' tablicą lub obiektem), zwracany jest wyjątek NieprawidlowyTyp.
'
'
' Wyjątki:
' NiedozwolonyTypZmiennej Jeżeli przekazany do funkcji argument nie jest liczbą i nie jest
' możliwe jego konwersja na liczbę ani uzyskanie jego tekstowej
' reprezentacji.
'
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2012-02-12 mielk Utworzenie funkcji.
'**********************************************************************************************************
Public Function dodajWiodaceZera(ByVal wartosc As Variant, Optional ByVal dlugosc As Byte = 2) As String
Const NAZWA_METODY As String = "dodajWiodaceZera"
'------------------------------------------------------------------------------------------------------
Dim iBrakujaceZnaki As Integer
Dim lLiczba As Long
'------------------------------------------------------------------------------------------------------
'Funkcja sprawdza czy podany argument wejściowy jest liczbą. Jeżeli nie, nie jest podejmowane -------|
'żadne działanie i zwracana jest oryginalna wartość argumentu bazowego. '|
If VBA.IsNumeric(wartosc) Then '|
'|
'Usuwa z liczby bazowej minus i część ułamkową '|
lLiczba = VBA.Int(VBA.Abs(wartosc)) '|
'|
'Sprawdza z ilu znaków składa się bazowa liczba i ile znaków trzeba do niej dodać, żeby '|
'wynikowy tekst posiadał oczekiwaną długość. '|
iBrakujaceZnaki = dlugosc - VBA.Len(VBA.CStr(lLiczba)) '|
'|
'Jeśli brakująca liczba znaków jest ujemna, oznacza to, że tekstowa reprezentacja -----------| '|
'bazowej liczby jest dłuższa od oczekiwanej ilości znaków i zostaje zwrócona w całości. '| '|
'W przeciwnym razie na początku dołączana jest odpowiednia liczba zer. '| '|
If iBrakujaceZnaki > 0 Then '| '|
'| '|
'Do dodania odpowiedniej liczby zer wykorzystana jest funkcja [String] '| '|
'powtarzająca n razy określony znak. '| '|
dodajWiodaceZera = VBA.String(iBrakujaceZnaki, "0") & lLiczba '| '|
'| '|
Else '| '|
'| '|
dodajWiodaceZera = lLiczba '| '|
'| '|
End If '| '|
'--------------------------------------------------------------------------------------------| '|
'|
Else '|
'|
'Jeżeli podany argument nie jest liczbą, zwracana jest jego tekstowa reprezentacja. '|
'Jeżeli jest to niemożliwe, wykonanie kodu jest przenoszone do etykiety NieprawidlowyTyp. '|
On Error GoTo NiedozwolonyTypZmiennej '|
dodajWiodaceZera = VBA.CStr(wartosc) '|
'|
End If '|
'----------------------------------------------------------------------------------------------------|
'==========================================================================================================
PunktWyjscia:
Exit Function
'----------------------------------------------------------------------------------------------------------
NiedozwolonyTypZmiennej:
'(...)
'Obsługa błędów dla sytuacji, kiedy podany parametr jest obiektem lub tablicą i nie da się go
'przekonwertować do typu tekstowego.
GoTo PunktWyjscia
End Function