ESCREVER POR EXTENSO

ERLANMG 25/01/2013 17:03:56
#418132
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
MARCELO.TREZE 25/01/2013 17:19:39
#418133
Resposta escolhida
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.
ERLANMG 25/01/2013 17:24:09
#418134
Marcelo,

Vou verificar.
ERLANMG 25/01/2013 17:29:24
#418135
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.

OCELOT 25/01/2013 17:53:29
#418136
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.
ERLANMG 25/01/2013 19:19:13
#418139
Não da mensagem nenhuma, apenas trava.

Testei em tres micros e mesma coisa.

AJSO 25/01/2013 20:31:31
#418143
Caro

Olhe o exemplo que fiz e não apresentou esse erro.......


Boa sorte
MARCELO.TREZE 25/01/2013 22:22:30
#418147
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