ESCREVER POR EXTENSO
Caros colegas,
Alguém saberia me dizer porque quando coloco a função abaixo no VB ele funciona perfeitamente usando run -> start, mas quando mando compilar ele trava.
Fiz alguns teste retirei esta função fora e compila rapidamente volto com a função continua travando.
Desde já agradeço a todos.
Public Function numeroExtenso(vNumero As Variant, Optional bMoeda As Boolean = True) As String
Dim iContador As Integer
Dim iTamanho As Integer
Dim sValor As String
Dim sParte As String
Dim sFinal As String
If IsNull(vNumero) Or vNumero <= 0 Or vNumero > 9999999.99 Or Not IsNumeric(vNumero) Then Exit Function
ReDim matGrupo(4), matTexto(4) As String
ReDim matUnidades(19) As String
matUnidades(1) = [Ô]Um [Ô]
matUnidades(2) = [Ô]Dois [Ô]
matUnidades(3) = [Ô]Tres [Ô]
matUnidades(4) = [Ô]Quatro [Ô]
matUnidades(5) = [Ô]Cinco [Ô]
matUnidades(6) = [Ô]Seis [Ô]
matUnidades(7) = [Ô]Sete [Ô]
matUnidades(8) = [Ô]Oito [Ô]
matUnidades(9) = [Ô]Nove [Ô]
matUnidades(10) = [Ô]Dez [Ô]
matUnidades(11) = [Ô]Onze [Ô]
matUnidades(12) = [Ô]Doze [Ô]
matUnidades(13) = [Ô]Treze [Ô]
matUnidades(14) = [Ô]Quatorze [Ô]
matUnidades(15) = [Ô]Quinze [Ô]
matUnidades(16) = [Ô]Dezesseis [Ô]
matUnidades(17) = [Ô]Dezessete [Ô]
matUnidades(18) = [Ô]Dezoito [Ô]
matUnidades(19) = [Ô]Dezenove [Ô]
ReDim matDezenas(9) As String
matDezenas(1) = [Ô]Dez [Ô]
matDezenas(2) = [Ô]Vinte [Ô]
matDezenas(3) = [Ô]Trinta [Ô]
matDezenas(4) = [Ô]Quarenta [Ô]
matDezenas(5) = [Ô]Cinquenta [Ô]
matDezenas(6) = [Ô]Sessenta [Ô]
matDezenas(7) = [Ô]Setenta [Ô]
matDezenas(8) = [Ô]Oitenta [Ô]
matDezenas(9) = [Ô]Noventa [Ô]
ReDim matCentenas(9) As String
matCentenas(1) = [Ô]Cento [Ô]
matCentenas(2) = [Ô]Duzentos [Ô]
matCentenas(3) = [Ô]Trezentos [Ô]
matCentenas(4) = [Ô]Quatrocentos [Ô]
matCentenas(5) = [Ô]Quinhentos [Ô]
matCentenas(6) = [Ô]Seiscentos [Ô]
matCentenas(7) = [Ô]Setecentos [Ô]
matCentenas(8) = [Ô]Oitocentos [Ô]
matCentenas(9) = [Ô]Novecentos [Ô]
sValor = Format(vNumero, [Ô]0000000000.00[Ô])
matGrupo(1) = Mid(sValor, 2, 3)
matGrupo(2) = Mid(sValor, 5, 3)
matGrupo(3) = Mid(sValor, 8, 3)
matGrupo(4) = [Ô]0[Ô] + Mid(sValor, 12, 2)
For iContador = 1 To 4
sParte = matGrupo(iContador)
iTamanho = Switch(Val(sParte) < 10, 1, Val(sParte) < 100, 2, Val(sParte) < 1000, 3)
If iTamanho = 3 Then
If Right(sParte, 2) <> [Ô]00[Ô] Then
matTexto(iContador) = matTexto(iContador) + matCentenas(Left(sParte, 1)) + [Ô]e [Ô]
iTamanho = 2
Else
matTexto(iContador) = matTexto(iContador) + IIf(Left(sParte, 1) = [Ô]1[Ô], [Ô]Cem [Ô], _
matCentenas(Left(sParte, 1)))
End If
End If
If iTamanho = 2 Then
If Val(Right(sParte, 2)) < 20 Then
matTexto(iContador) = matTexto(iContador) + matUnidades(Right(sParte, 2))
Else
matTexto(iContador) = matTexto(iContador) + matDezenas(Mid(sParte, 2, 1))
If Right(sParte, 1) <> [Ô]0[Ô] Then
matTexto(iContador) = matTexto(iContador) + [Ô]e [Ô]
iTamanho = 1
End If
End If
End If
If iTamanho = 1 Then
matTexto(iContador) = matTexto(iContador) + matUnidades(Right(sParte, 1))
End If
Next
If Val(matGrupo(1) + matGrupo(2) + matGrupo(3)) = 0 And Val(matGrupo(4)) <> 0 Then
sFinal = matTexto(4) + IIf(Val(matGrupo(4)) = 1, [Ô]centavo[Ô], [Ô]centavos[Ô])
Else
sFinal = [Ô][Ô]
sFinal = sFinal + IIf(Val(matGrupo(1)) <> 0, matTexto(1) + IIf(Val(matGrupo(1)) > 1, _
[Ô]milhões [Ô], [Ô]milhão [Ô]), [Ô][Ô])
If Val(matGrupo(2) + matGrupo(3)) = 0 Then
sFinal = sFinal + [Ô]de [Ô]
Else
sFinal = sFinal + IIf(Val(matGrupo(2)) <> 0, matTexto(2) + [Ô]Mil [Ô], [Ô][Ô])
End If
If Not bMoeda Then
sFinal = sFinal + matTexto(3) + IIf(Val(matGrupo(4)) <> 0, [Ô]Virgula [Ô] + matTexto(4), [Ô][Ô])
Else
sFinal = sFinal + matTexto(3) + IIf(Val(matGrupo(1) + matGrupo(2) + matGrupo(3)) = 1, [Ô]real [Ô], _
[Ô]reais [Ô])
sFinal = sFinal + IIf(Val(matGrupo(4)) <> 0, [Ô]e [Ô] + matTexto(4) + IIf(Val(matGrupo(4)) = 1, _
[Ô]centavo[Ô], [Ô]centavos[Ô]), [Ô][Ô])
End If
End If
numeroExtenso = sFinal
End Function
Alguém saberia me dizer porque quando coloco a função abaixo no VB ele funciona perfeitamente usando run -> start, mas quando mando compilar ele trava.
Fiz alguns teste retirei esta função fora e compila rapidamente volto com a função continua travando.
Desde já agradeço a todos.
Public Function numeroExtenso(vNumero As Variant, Optional bMoeda As Boolean = True) As String
Dim iContador As Integer
Dim iTamanho As Integer
Dim sValor As String
Dim sParte As String
Dim sFinal As String
If IsNull(vNumero) Or vNumero <= 0 Or vNumero > 9999999.99 Or Not IsNumeric(vNumero) Then Exit Function
ReDim matGrupo(4), matTexto(4) As String
ReDim matUnidades(19) As String
matUnidades(1) = [Ô]Um [Ô]
matUnidades(2) = [Ô]Dois [Ô]
matUnidades(3) = [Ô]Tres [Ô]
matUnidades(4) = [Ô]Quatro [Ô]
matUnidades(5) = [Ô]Cinco [Ô]
matUnidades(6) = [Ô]Seis [Ô]
matUnidades(7) = [Ô]Sete [Ô]
matUnidades(8) = [Ô]Oito [Ô]
matUnidades(9) = [Ô]Nove [Ô]
matUnidades(10) = [Ô]Dez [Ô]
matUnidades(11) = [Ô]Onze [Ô]
matUnidades(12) = [Ô]Doze [Ô]
matUnidades(13) = [Ô]Treze [Ô]
matUnidades(14) = [Ô]Quatorze [Ô]
matUnidades(15) = [Ô]Quinze [Ô]
matUnidades(16) = [Ô]Dezesseis [Ô]
matUnidades(17) = [Ô]Dezessete [Ô]
matUnidades(18) = [Ô]Dezoito [Ô]
matUnidades(19) = [Ô]Dezenove [Ô]
ReDim matDezenas(9) As String
matDezenas(1) = [Ô]Dez [Ô]
matDezenas(2) = [Ô]Vinte [Ô]
matDezenas(3) = [Ô]Trinta [Ô]
matDezenas(4) = [Ô]Quarenta [Ô]
matDezenas(5) = [Ô]Cinquenta [Ô]
matDezenas(6) = [Ô]Sessenta [Ô]
matDezenas(7) = [Ô]Setenta [Ô]
matDezenas(8) = [Ô]Oitenta [Ô]
matDezenas(9) = [Ô]Noventa [Ô]
ReDim matCentenas(9) As String
matCentenas(1) = [Ô]Cento [Ô]
matCentenas(2) = [Ô]Duzentos [Ô]
matCentenas(3) = [Ô]Trezentos [Ô]
matCentenas(4) = [Ô]Quatrocentos [Ô]
matCentenas(5) = [Ô]Quinhentos [Ô]
matCentenas(6) = [Ô]Seiscentos [Ô]
matCentenas(7) = [Ô]Setecentos [Ô]
matCentenas(8) = [Ô]Oitocentos [Ô]
matCentenas(9) = [Ô]Novecentos [Ô]
sValor = Format(vNumero, [Ô]0000000000.00[Ô])
matGrupo(1) = Mid(sValor, 2, 3)
matGrupo(2) = Mid(sValor, 5, 3)
matGrupo(3) = Mid(sValor, 8, 3)
matGrupo(4) = [Ô]0[Ô] + Mid(sValor, 12, 2)
For iContador = 1 To 4
sParte = matGrupo(iContador)
iTamanho = Switch(Val(sParte) < 10, 1, Val(sParte) < 100, 2, Val(sParte) < 1000, 3)
If iTamanho = 3 Then
If Right(sParte, 2) <> [Ô]00[Ô] Then
matTexto(iContador) = matTexto(iContador) + matCentenas(Left(sParte, 1)) + [Ô]e [Ô]
iTamanho = 2
Else
matTexto(iContador) = matTexto(iContador) + IIf(Left(sParte, 1) = [Ô]1[Ô], [Ô]Cem [Ô], _
matCentenas(Left(sParte, 1)))
End If
End If
If iTamanho = 2 Then
If Val(Right(sParte, 2)) < 20 Then
matTexto(iContador) = matTexto(iContador) + matUnidades(Right(sParte, 2))
Else
matTexto(iContador) = matTexto(iContador) + matDezenas(Mid(sParte, 2, 1))
If Right(sParte, 1) <> [Ô]0[Ô] Then
matTexto(iContador) = matTexto(iContador) + [Ô]e [Ô]
iTamanho = 1
End If
End If
End If
If iTamanho = 1 Then
matTexto(iContador) = matTexto(iContador) + matUnidades(Right(sParte, 1))
End If
Next
If Val(matGrupo(1) + matGrupo(2) + matGrupo(3)) = 0 And Val(matGrupo(4)) <> 0 Then
sFinal = matTexto(4) + IIf(Val(matGrupo(4)) = 1, [Ô]centavo[Ô], [Ô]centavos[Ô])
Else
sFinal = [Ô][Ô]
sFinal = sFinal + IIf(Val(matGrupo(1)) <> 0, matTexto(1) + IIf(Val(matGrupo(1)) > 1, _
[Ô]milhões [Ô], [Ô]milhão [Ô]), [Ô][Ô])
If Val(matGrupo(2) + matGrupo(3)) = 0 Then
sFinal = sFinal + [Ô]de [Ô]
Else
sFinal = sFinal + IIf(Val(matGrupo(2)) <> 0, matTexto(2) + [Ô]Mil [Ô], [Ô][Ô])
End If
If Not bMoeda Then
sFinal = sFinal + matTexto(3) + IIf(Val(matGrupo(4)) <> 0, [Ô]Virgula [Ô] + matTexto(4), [Ô][Ô])
Else
sFinal = sFinal + matTexto(3) + IIf(Val(matGrupo(1) + matGrupo(2) + matGrupo(3)) = 1, [Ô]real [Ô], _
[Ô]reais [Ô])
sFinal = sFinal + IIf(Val(matGrupo(4)) <> 0, [Ô]e [Ô] + matTexto(4) + IIf(Val(matGrupo(4)) = 1, _
[Ô]centavo[Ô], [Ô]centavos[Ô]), [Ô][Ô])
End If
End If
numeroExtenso = sFinal
End Function
colega é estranho o fato, pois a função sozinha funciona perfeitamente inclusive consegui compilar.
será que não está havendo algum conflito com os nomes de variaveiis, tipo algum outro lugar não possui uma variavel com o mesmo nome da variavel nesta função.
será que não está havendo algum conflito com os nomes de variaveiis, tipo algum outro lugar não possui uma variavel com o mesmo nome da variavel nesta função.
Marcelo,
Vou verificar.
Vou verificar.
Marcelo,
Fiz o que voce disse, criei um arquivo somente com a função, um text exibindo o extenso em uma msgbox, e acontenceu o mesmo run -> start funcionou compilar não.
Para resolver provisoriamente uma dll, mas gostaria de solucinar o que esta ocorrendo com a função extenso.
Fiz o que voce disse, criei um arquivo somente com a função, um text exibindo o extenso em uma msgbox, e acontenceu o mesmo run -> start funcionou compilar não.
Para resolver provisoriamente uma dll, mas gostaria de solucinar o que esta ocorrendo com a função extenso.
E o que mensagem que dá quando tenta compilar?
O que pode estar acontecendo ai é que existe algum erro nesse código, quando você tenta compilar ele acha o erro, quando você executa o VB6 só compila a parte do código que for executado, por isso existe uma opção lá chamada [Ô]Start with full compile[Ô], que em vez de ir compilando só o que vai usando compila tudo primeiro antes de executar.
O que pode estar acontecendo ai é que existe algum erro nesse código, quando você tenta compilar ele acha o erro, quando você executa o VB6 só compila a parte do código que for executado, por isso existe uma opção lá chamada [Ô]Start with full compile[Ô], que em vez de ir compilando só o que vai usando compila tudo primeiro antes de executar.
Não da mensagem nenhuma, apenas trava.
Testei em tres micros e mesma coisa.
Testei em tres micros e mesma coisa.
Caro
Olhe o exemplo que fiz e não apresentou esse erro.......
Boa sorte
Olhe o exemplo que fiz e não apresentou esse erro.......
Boa sorte
qual é o service pack de seu vb6 é o sp6, se não for atualize o service pack para sp6
Tópico encerrado , respostas não são mais permitidas