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
| Option Compare Database
Option Explicit
Function Unit(ByVal X As Long, ByVal Form1 As String, ByVal Form234 As String, ByVal FormOther As String) As String
Select Case X Mod 100
Case 10 To 20
Unit = FormOther
Case Else
Select Case X Mod 10
Case 1
Unit = Form1
Case 2
If Form234 = " тысячи " Then
Unit = "е тысячи "
ElseIf Form234 = " копейки" Then
Unit = Form234
Else
Unit = "а" & Form234
End If
Case 3 To 4
Unit = Form234
Case Else
Unit = FormOther
End Select
End Select
End Function
Public Function CardText(ByVal XX As Currency) As String
'On Error GoTo err
Dim Triade As Currency, X As Currency, R As String, i As Byte, Units, Ones, Tens, Hundreds
Units = Array( _
Array(" копейка", " копейки", " копеек"), _
Array("ин рубль ", " рубля ", " рублей "), _
Array("на тысяча ", " тысячи ", " тысяч "), _
Array("ин миллион ", " миллиона ", " миллионов "), _
Array("ин миллиард ", " миллиарда ", " миллиардов "), _
Array("ин триллион ", " триллиона ", " триллионов "), _
Array(" ? ", " ? ", " ? "), _
Array(" ? ", " ? ", " ? "))
Ones = Array("", "од", "дв", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
Tens = Array("", "десять ", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
Hundreds = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
XX = XX + 0.005
X = Int(XX)
Triade = Int((XX - X) * 100)
R = Format(Triade, "00") + Unit(Triade, Units(0)(0), Units(0)(1), Units(0)(2))
If XX = 0 Then CardText = "Ноль рублей " & R: Exit Function
i = 0
While X > 0
Triade = (X / 1000 - Int(X / 1000)) * 1000: X = Int(X / 1000): i = i + 1
If Triade <> 0 Or i < 2 Then
Select Case Triade Mod 100
Case 1 To 19
R = Hundreds(Triade \ 100) & Ones(Triade Mod 100) & Unit(Triade, Units(i)(0), Units(i)(1), Units(i)(2)) & R
Case Else
R = Hundreds(Triade \ 100) & Tens((Triade Mod 100) \ 10) & Ones(Triade Mod 10) & Unit(Triade, Units(i)(0), Units(i)(1), Units(i)(2)) & R
End Select
End If
Wend
R = Trim(R)
CardText = UCase(Left(R, 1)) & LCase(Mid(R, 2))
Exit Function
err:
CardText = "#ош."
End Function |