Does date for extensive where error?

F

Frank Dulk

Although it has gotten to rotate the code of the date with DLL, would have
problem with my DEAR users.. for that, catching a little bit of here and of
there, I set up that code of dates for extensive, with 2 functions just...


Function Extenso(nValor)

'Variáveis
Dim nContador, nTamanho As Integer
Dim cValor, cParte, cFinal, ano, resto As String
ReDim agrupo(2), atexto(2) As String

'Matrizes de extensos (Parciais)
ReDim aUnid(19) As String
aUnid(1) = "um ": aUnid(2) = "dois ": aUnid(3) = "tres "
aUnid(4) = "quatro ": aUnid(5) = "cinco ": aUnid(6) = "seis "
aUnid(7) = "sete ": aUnid(8) = "oito ": aUnid(9) = "nove "
aUnid(10) = "dez ": aUnid(11) = "onze ": aUnid(12) = "doze "
aUnid(13) = "treze ": aUnid(14) = "quatorze ": aUnid(15) = "quinze "
aUnid(16) = "dezesseis ": aUnid(17) = "dezessete ": aUnid(18) = "dezoito "
aUnid(19) = "dezenove "

ReDim aDezena(9) As String
aDezena(1) = "dez ": aDezena(2) = "vinte ": aDezena(3) = "trinta "
aDezena(4) = "quarenta ": aDezena(5) = "cinquenta "
aDezena(6) = "sessenta ": aDezena(7) = "setenta ": aDezena(8) = "oitenta "
aDezena(9) = "noventa "

ReDim aCentena(9) As String
aCentena(1) = "cento ": aCentena(2) = "duzentos "
aCentena(3) = "trezentos ": aCentena(4) = "quatrocentos "
aCentena(5) = "quinhentos ": aCentena(6) = "seiscentos "
aCentena(7) = "setecentos ": aCentena(8) = "oitocentos "
aCentena(9) = "novecentos "

'Separa valor em grupos

agrupo(1) = Mid$(nValor, 2, 3)
agrupo(2) = Left$(nValor, 1)

atexto(1) = ""
If agrupo(2) = 1 Then
atexto(2) = "mil "
ElseIf agrupo(2) = 2 Then
atexto(2) = "dois mil "
End If

If agrupo(1) <> "000" Then

cParte = agrupo(1)
nTamanho = Switch(Val(cParte) < 10, 1, Val[cParte) < 100, 2, Val[cParte) <
1000, 3)
If nTamanho = 3 Then
If Right$(cParte, 2) <> "00" Then
atexto(1) = atexto(1) + aCentena(Left(cParte, 1))
nTamanho = 2
Else
atexto(1) = atexto(1) + IIf(Left$(cParte, 1) = "1", "cem ",
aCentena(Left(cParte, 1)))
End If
End If
If nTamanho = 2 Then
If Val(Right(cParte, 2)) < 20 Then
atexto(1) = atexto(1) + "e " + aUnid(Right(cParte, 2))
Else
atexto(1) = atexto(1) + "e " + aDezena(Mid(cParte, 2, 1))
If Right$(cParte, 1) <> "0" Then
atexto(1) = "e " + atexto(1)
nTamanho = 1
End If
End If
End If
If nTamanho = 1 Then
atexto(1) = atexto(1) + "e " + aUnid(Right(cParte, 1))
End If
End If
cFinal = atexto(2) & atexto(1)
Extenso = cFinal
'Final

End Function

Public Function ExtensoData(UmaData As Variant)

On Error GoTo Erros

If Month(UmaData) > 12 Then
Error 9
End If

Dim IniData As String
IniData = CDate(UmaData)
If Not IsDate(UmaData) Then
MsgBox "Data inválida"
Exit Function
End If

TodosDias = Array("", "um ", "dois ", "três ", "quatro ", _
"cinco ", "seis ", "sete ", "oito ", "nove ", "dez ", _
"onze ", "doze ", "treze ", "quatorze ", "quinze ", _
"dezesseis ", "dezessete ", "dezoito ", "dezenove ", "vinte ", _
"vinte e um ", "vinte e dois ", "vinte e três ", "vinte e quatro ", _
"vinte e cinco ", "vinte e seis ", "vinte e sete ", "vinte e oito ", _
"vinte e nove ", "trinta ", "trinta e um ")

TodosMeses = Array("", "janeiro ", "fevereiro ", "março ", _
"abril ", "maio ", "junho ", "julho ", "agosto ", "setembro ", _
"outubro ", "novembro ", "dezembro ")

Dim DiaData, MesData, AnoData As String

DiaData = TodosDias(Day(IniData))

MesData = TodosMeses(Month(IniData))

AnoData = Extenso(Year(IniData))'funcao para traduzir o ano

ExtensoData = DiaData & "de " & MesData & "de " & AnoData
Erros:
If Err.Number = 9 Or Err.Number = 13 Then
MsgBox "Data inválida"
Exit Function
End If

End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top