Windows Forms - Formatação

Se você programa sabe que ao exibir um campo, por exemplo, tipo moeda, o separador de milhares e o de casa decimal em português ajuda muito na visualização do valor.

Contudo quando vamos armazenar esse valor no banco de dados temos que eliminar essa formatação em português, formatar no padrão inglês etc. Este módulo faz essas funções.

Module Formatacao

Convertendo Moeda do Padrão US para o BR

    ''' <summary>
    ''' Formatação de dinheiro do formato br para o us ( p/ salvar no bd )
    ''' </summary>
    ''' <param name="valor"></param>
    ''' <returns></returns>
    Public Function Formata_Dinheiro(ByVal valor As String)
        'converte o dinheiro do format br para o ingles
        Dim a As String

        'verificando se o valor já esta em ingles
        If valor.IndexOf(".") >= 0 And valor.IndexOf(",") < 0 Then
            Return valor
        End If

        a = valor
        a = a.Replace(".", "")
        a = a.Replace(",", ".")
        Return a
    End Function

Função para eliminar a Formatação de um CPF ou CNPJ

    Public Function Limpa_CPF_CNPJ(ByVal documento As String) As String
        Dim a As String

        a = documento
        a = Replace(a, ".", "")
        a = Replace(a, ",", "")
        a = Replace(a, "-", "")
        a = Replace(a, "/", "")
        a = Replace(a, "\", "")
        a = Replace(a, " ", "")

        Limpa_CPF_CNPJ = a
    End Function

Função que converte um string numérico na formatação de um CNPJ ou CPF

    Public Function Formata_CPF_CNPJ(ByVal documento As String) As String
        'recebe o num doc e retorna ele sem formato, apenas numeros
        Dim a As String
        Dim b As String
        Dim c As Boolean = False

        'COM DIGITOS VERIFICADORES---------------------------------------------------
        ' formato padrão de CNPJ :
        '        formatado : 18 caracteres - 14 caracteres numéricos + 4 separadores
        '        não formatado : 14 caracteres numéricos
        '     Formatado                    sem formato        
        '     00.001.713/0001-70            00001713000170
        '     67.839.993/0001-60            67839993000160
        '     97.418.735/0004-14            97418735000414
        '     tam=18                        tam=14

        ' formato padrão de CPF :
        '        formatado : 14 caracteres - 11 caracteres numéricos + 3 separadores
        '        não formatado : 11 caracteres numéricos
        '     Formatado                    sem formato
        '     968.608.638-20                96860863820
        '     tam=14                        tam=11

        'SEM DIGITOS VERIFICADORES---------------------------------------------------
        ' formato padrão de CNPJ :
        '        formatado : 15 caracteres - 12 caractetes numéricos + 3 separadores
        '        não formatado : 12 caracteres numéricos
        '     Formatado                    sem formato        
        '     00.001.713/0001            000017130001
        '     67.839.993/0001            678399930001
        '     97.418.735/0004            974187350004
        '     tam=15                        tam=12

        ' formato padrão de CPF :
        '        formatado : 11 caracteres - 9 caracteres numéricos + 2 separadores
        '        não formatado : 9 caracteres numéricos
        '     Formatado                    sem formato
        '     968.608.638                968608638
        '     tam=11                        tam=9

        a = documento
        a = limpa(a) 'CNPJ+DV=14, CPF+DV=11

        ' formatos inválidos
        If Trim(a) = "" Then
            MsgBox("Não foi recebido nenhum número", vbCritical, "Function Formata_CPF_CNPJ")
            Formata_CPF_CNPJ = ""
            Exit Function
        End If

        ' CGC/CNPJ com digitos verificadores - sem formatação - padrão
        If E_CNPJ(a) Then
            If Len(a) = 18 Then
                Return a
                Exit Function
            Else
                If Len(a) = 14 Then
                    b = Strings.Left(a, 2) + "."
                    b = b + Mid$(a, 3, 3) + "."
                    b = b + Mid$(a, 6, 3) + "/"
                    b = b + Mid$(a, 9, 4) + "-"
                    b = b + Right$(a, 2)
                    Formata_CPF_CNPJ = b
                    Return b
                    Exit Function
                    MsgBox("É um CNPJ/CGC mas não sei o formato correto", vbCritical, "Function Formata_CPF_CNPJ")
                End If
            End If
        End If

        ' cpf com digitos verificadores sem formatação
        If E_CPF(a) Then
            If Len(a) = 14 Then
                b = Mid(a, 4, 3) + "."
                b = b + Mid$(a, 7, 3) + "."
                b = b + Mid$(a, 10, 3) + "-"
                b = b + Right$(a, 2)
                Formata_CPF_CNPJ = b
                Exit Function
            Else
                If Len(a) = 11 Then
                    b = Mid(a, 4, 3) + "."
                    b = b + Mid$(a, 7, 3) + "."
                    b = b + Mid$(a, 10, 3) + "-"
                    b = b + Right$(a, 2)
                    Formata_CPF_CNPJ = b
                    Exit Function
                End If
            End If
        End If

        'cnpj sem formatação e sem os digitos de verificação - para ser um cnpj tem que ter o 0001/2/3/4
        'Formatado corretamente = 00.001.713/0001-70(18), sem separadores : 00001713000170(14), sem DVs :000017130001(12)
        'formatando : 00.001.713/0001
        If (Len(a) = 12) And
         ((Left(a, 4) = "0001") Or
         (Left(a, 4) = "0002") Or
         (Left(a, 4) = "0003") Or
         (Left(a, 4) = "0004")) Then
            b = Strings.Left(a, 2) + "."
            b = b + Mid$(a, 3, 3) + "."
            b = b + Mid$(a, 6, 3) + "/"
            'b = b + Mid$(a, 9, 4) + "-"        não tem
            'b = b + Right$(a, 2)                não tem
            Formata_CPF_CNPJ = b
            Exit Function
        End If

        ' cpf sem formatação
        If (Len(a) = 11) Then 'cpf sem formatação
            If (InStr(a, "/") = 0) And (InStr(a, ".") = 0) Then
                b = Strings.Left(a, 3) + "."
                b = b + Mid$(a, 4, 3) + "."
                b = b + Mid$(a, 7, 3) + "-"
                b = b + Right$(a, 2)
                Formata_CPF_CNPJ = b
                Exit Function
            End If
        End If


        MsgBox("O dado recebido não CPF nem CNPJ : " + CStr(a), vbCritical, "Function Formata_CPF_CNPJ")
        Return "-1"
    End Function


Formatando a apresentação de números



Formatando um string no formato Moeda de acordo com o idioma do Sistema

    Public Function FormataMoeda(valor As String) As String
        Return Val(valor).ToString("C")
    End Function

Formatando um string no formato Decimal de acordo com o idioma do Sistema

    Public Function FormataDecimal(valor As String) As String
        Dim a As Integer
        a = Val(valor)
        Return a.ToString("D")
    End Function

    Public Function FormataExponencial(valor As String) As String
        Return Val(valor).ToString("E")
    End Function

Formatando um string no formato Ponto fixo de acordo com o idioma do Sistema

    Public Function FormataPontoFixo(valor As String) As String
        Return Val(valor).ToString("F")
    End Function

Formatando um string no formato Geral de acordo com o idioma do Sistema

    Public Function FormataGeral(valor As String) As String
        Return Val(valor).ToString("G")
    End Function

Formatando um string no formato Numérico de acordo com o idioma do Sistema

    Public Function FormataNumero(valor As String) As String
        Return Val(valor).ToString("N")
    End Function

Formatando um string no formato Numérico Porcentagem de acordo com o idioma do Sistema

    Public Function FormataPorcentagem(valor As String) As String
        Return Val(valor).ToString("P")
    End Function

Formatando um string no formato Retorno de acordo com o idioma do Sistema

    Public Function FormataIdaEVolta(valor As String) As String
        'Resultado: Uma cadeia de caracteres que pode ir e voltar para um número idêntico.
        Return Val(valor).ToString("R")
    End Function

Formatando um string no formato Hexadecimal de acordo com o idioma do Sistema

    Public Function FormataHexadecimal(valor As String) As String
        Dim a As Integer
        a = Val(valor)
        Return a.ToString("X")
    End Function

Formatando um string no formato Especial de acordo com o que desejamos

    Public Function FormataEspecial(valor As String) As String
        Return Val(valor).ToString("$#,###.00")
        '0=zeros não significativos
        '#=um dígito numérico qualquer
        '.=ponto decimal
        ',=separador de milhares
        '%=simbolo de porcentagem
        'E+0, E-0, e+0, e-0 = notação de expoente
        '\=caractere literal como \n
        '""=literal string
        ';=separador de seção
    End Function

End Module