VBA - link

9 отговора 816 прегледа
в отговор на pitanka #2

Re: VBA - link

Много интерсни неща!!!

Видях един код който обръща числа в словом (а аз го правя по доста по-сложен начин) но имам нужда от помощ. Какво да направя за да заработи?


[линк]

Отговор
в отговор на DDeli #3

Re: VBA - link

Този код е доста елементарен и не върши цялостно работа за словом работи само с цели числа /няма с'тинки/, трябва да се преведе, и да се пооправи малко. И моя код за словом с доста по сложен но пък ми работи добре.

Отговор
в отговор на DDeli #4

Re: VBA - link

А как да заработи: направи първата функция/NumberToWords/ Public, и после от Paste Functions/User Defined с аргумент числовата ст/ст на някоя клетка.
А сайта наистина е добър

Отговор
в отговор на pitanka #5

Re: VBA - link

вижте и тук

[линк]

Отговор
в отговор на pitanka #6

Re: VBA - link

Искам да предупредя всички, които ще се впуснат да си свалят неща от вяскакви сайтове - внимавайте много да не се опарите. Особено руските сайтове са едно невероятно съчетание от супер полезни неща и вируси, мнооого вируси

То, не че не мога, ама има ли смисъл, като няма значение
Отговор
в отговор на iwanov #7

Re: VBA - link

Този код го пробвах но е много ограничен. Можеш ли да ми пуснеш твоя код ако не ти е проблем ([email protected])

Отговор
в отговор на DDeli #8

Re: VBA - link


Option Base 1
Private cResult As String
Private lAnd As Boolean

Function N2W(nNumber As Double)
Dim cNumber As String
Dim nGroups As Integer
Dim n As Integer
Dim nDiv As Integer

cResult = ""
nNumber = nNumber * 100
nDiv = nNumber Mod 100
nNumber = nNumber \ 100
lAnd = False
cNumber = PadL(LTrim(Str(nNumber)), 12, "0")
nGroups = Int(Len(cNumber) / 3)
For n = 1 To nGroups
Call ProcGroup(Val(Mid(cNumber, n * 3 - 2, 3)), 5 - n)
Next
If nDiv > 0 Then
N2W = LTrim(cResult) + " лв. и " + Str(nDiv) + " ст."
Else
N2W = LTrim(cResult) + " лв."
End If
End Function

Sub ProcGroup(nNumber, nGroup)
cGroupS = Array("", " хиляда", " милион", " трилион")
cGroupM = Array("", " хиляди", " милиона", " трилиона")
c3_9 = Array(" три", " четири", " пет", " шест", " седем", " осем", " девет")
c10_19 = Array(" десет", " единаесет", " дванадесет", " тринадесет", " четиринадесет", _
" петнадесет", " шестнадесет", " седемнадесет", " осемнадсесет", " деветнадесет")
c2X_9X = Array(" двадесет", " тридесет", " четиридесет", " петдесет", " шестдесет", _
" седемдесет", " осемдесет", " деветдесет")
c0XX_9XX = Array("", " сто", " двеста", " триста", " четиристотин", " петстотин", _
" шестотин", " седемстотин", " осемстотин", " деветстотин")
Dim n, nleft, nRight1, nRight2, nMid As Integer
Dim lMidNo1 As Boolean
nleft = Int(nNumber / 100)
nRight1 = nNumber Mod 10
nRight2 = nNumber Mod 100
nMid = Int((nNumber Mod 100) / 10)
lMidNo1 = True
If nGroup = 1 And lAnd And nleft > 0 And nRight2 = 0 Then cResult = cResult + " и"
cResult = cResult + c0XX_9XX(nleft + 1)
If (Between(nRight2, 1, 20) Or _
InSet(nRight2, 30, 40, 50, 60, 70, 80, 90)) And (lAnd Or nleft > 0) Then
cResult = cResult + " и"
End If
If nMid > 1 Then
cResult = cResult + c2X_9X(nMid - 1)
If nRight1 > 0 Then cResult = cResult + " и"
ElseIf nMid = 1 Then
lMidNo1 = False
cResult = cResult + c10_19(nRight2 - 9)
End If
If Between(nRight1, 3, 9) And lMidNo1 Then cResult = cResult + c3_9(nRight1 - 2)
If nRight1 = 1 And lMidNo1 Then
If nGroup <> 2 Or nNumber > 1 Then cResult = cResult + " един"
End If
If nRight1 = 2 And lMidNo1 Then cResult = cResult + Iif(nGroup = 2, " две", " два")
If nGroup > 1 And nNumber > 0 Then
lAnd = True
cResult = cResult + Iif(nNumber > 1, cGroupM(nGroup), cGroupS(nGroup))
End If
End Sub

Function PadL(cValue, nLen, cChar) As String
PadL = Right(Application.Rept(cChar, nLen) + cValue, nLen)
End Function

Function Between(xValue, xLo, xUp) As Boolean
If xValue >= xLo And xValue <= xUp Then
Between = True
Else
Between = False
End If
End Function

Function Iif(lCondition, xTrue, xFalse)
If lCondition Then
Iif = xTrue
Else
Iif = xFalse
End If
End Function

Function InSet(xValue, ParamArray xArray())
Dim n
For n = LBound(xArray) To UBound(xArray)
If xValue = xArray(n) Then
InSet = True
Exit For
End If
Next
End Function



Щирлиц
Отговор
в отговор на Щиpлиц #9

Re: VBA - link

Много мило, но ivanow ми даде един, който ми върши работа. Все пак и някай друг ще се възползва от твоя код постнат тук.

НО - все още си търся свестен код за словом но на английски и без да вмъква в словома долари и центове. (Да го сложа в един файл за издаване на инвойси в различни валути.
Из мрежата има доста Number2words, но или добавят доларите или не ми работят. Та ако можеш, pls help.

Отговор
в отговор на Щиpлиц #10

Re: VBA - link

О! Щирлиц се появи най-сетне! :))
Добре дошъл!

Този код, освен граматическите грешчици за думите " единаесет" и " осемнадсесет", което няма да го правим на въпрос, има и логическа такава.

Например:
121 000 словом го изписва, като "сто двадесет и един хиляди лв."

Пипнах го леко, като замених това :
If nGroup <> 2 Or nNumber > 1 Then cResult = cResult + "един"

с това:
If nGroup <> 2 Or nNumber > 1 Then cResult = cResult + Convert.Iif(nGroup = 1, " един", " една")

и се оправи ...


Отговор