Select Menu



por Alessandro Trovato

Programação do canal

Programação do canal
#124 - Excel VBA - Formatação de textos avançada  (Tira dúvidas)

Nessa aula há uma célula armazenando uma grande quantidade de textos. Vou explicar como formatar a primeira letra apenas em maiúscula a cada ocorrência do ponto. 

Já tinha feito algo assim no VBA?

Conteúdo da aula:

 - Instrução Do While
 - Instrução If
 - Instrução Proper
 - Instrução For Next
 - Instrução UCase




Espero que goste do conteúdo.
Bons estudos!

Se gostou compartilhe com seus colegas de trabalho e amigos!

Acesso as planilhas: 
www.sigaonerd.com

Facebook / Twitter

Inscreva-se em meu canal de vídeos no Youtube clicando aqui 

Microsoft Excel é um produto do pacote Microsoft Office
-------------------------------------------------------
1)  Tenha acesso a mais de 465 vídeos tutoriais em meu canal de vídeos no Youtube. Clique aqui e conheça o site que criei com o catálogo das aulas dos cursos completos que gravei!

2) Clique aqui para ter acesso ao download de centenas de planilhas e apostilas que criei (tudo gratuito)


Bons estudos!
- - - -
#123 - Excel VBA - Extração de textos avançada (Tira dúvidas)

Esta é mais uma aula de Tira Dúvidas recebida por email.
Explico como fazer a extração de textos em colunas e formatos diferentes em cada célula com base em um critério identificado como comum nos textos. 

Conteúdo da aula:

 - Instrução Do While
 - Instrução IsNumeric
 - Instrução InStr
 - Instrução For Next



Espero que goste do conteúdo.
Bons estudos!

Se gostou compartilhe com seus colegas de trabalho e amigos!

Acesso as planilhas: 
www.sigaonerd.com

Facebook / Twitter

Inscreva-se em meu canal de vídeos no Youtube clicando aqui 

Microsoft Excel é um produto do pacote Microsoft Office
-------------------------------------------------------
1)  Tenha acesso a mais de 465 vídeos tutoriais em meu canal de vídeos no Youtube. Clique aqui e conheça o site que criei com o catálogo das aulas dos cursos completos que gravei!

2) Clique aqui para ter acesso ao download de centenas de planilhas e apostilas que criei (tudo gratuito)


Bons estudos!
- - - -
#122 - Excel VBA - Log de Acesso no Banco de dados e transformar a planilha para multiusuário

Esta é mais uma aula do projeto de Access x Excel VBA. Demonstrarei como criar um log de acessos a planilha diretamente no banco de dados. 
Vou explicar também como tornar nosso projeto multiusuário.

Conteúdo da aula:

 - Acesso ao banco de dados Access para gravar o Log
 - Configurando o compartilhamento da planilha
 - Como acessar a planilha com mais de um usuário
 - Função ENVIRON entre outras






Espero que goste do conteúdo.
Bons estudos!

Se gostou compartilhe com seus colegas de trabalho e amigos!

Acesso as planilhas: 
www.sigaonerd.com

Facebook / Twitter

Inscreva-se em meu canal de vídeos no Youtube clicando aqui 

Microsoft Excel é um produto do pacote Microsoft Office
-------------------------------------------------------
1)  Tenha acesso a mais de 465 vídeos tutoriais em meu canal de vídeos no Youtube. Clique aqui e conheça o site que criei com o catálogo das aulas dos cursos completos que gravei!

2) Clique aqui para ter acesso ao download de centenas de planilhas e apostilas que criei (tudo gratuito)


Bons estudos!
- - - -
#121 - Cozinhando Curso Avançado de VBA Excel - Com Fernando Fernandes

Este é um vídeo onde eu e o Fernando Fernandes divulgamos nosso trabalho de criação do curso Avançado de VBA. 

Conheça e se inscreva no canal do Fernando:
https://www.youtube.com/channel/UCPFsPs7HWrvkT16duwYzjXg




Espero que goste do conteúdo.
Bons estudos!

Se gostou compartilhe com seus colegas de trabalho e amigos!

Acesso as planilhas: 
www.sigaonerd.com

Facebook / Twitter

Inscreva-se em meu canal de vídeos no Youtube clicando aqui 

Microsoft Excel é um produto do pacote Microsoft Office
-------------------------------------------------------
1)  Tenha acesso a mais de 465 vídeos tutoriais em meu canal de vídeos no Youtube. Clique aqui e conheça o site que criei com o catálogo das aulas dos cursos completos que gravei!

2) Clique aqui para ter acesso ao download de centenas de planilhas e apostilas que criei (tudo gratuito)


Bons estudos!
-

Reaproveitando validações em formulários


Em artigos anteriores certamente você deve ter visto rotinas de validações de dados nos formulários. Esses códigos estavam sempre atrelados ao próprio controle do formulário, como boa parte dos desenvolvedores praticam.

Entretanto, caso você tenha vários campos similares, o código ficará repetido em vários pontos do formulário. Isso pode ser resolvido criando uma sub-rotina no formulário e fazendo os campos chamarem essa sub-rotina. Porém, se você tiver vários formulários, essa solução não funcionaria e teria duas opções: copiar o código para o outro formulário (o que duplicaria o código) ou colocar o código em um módulo à parte, de forma que seria acessível aos diversos formulários. Esta seria uma melhor opção.

Vejamos um exemplo simples, onde precisamos remover espaços adicionais de campos de nomes. É um procedimento que deve ser colocado em campos de nomes de usuários, de clientes, de fornecedores, de produtos, de marcas etc. Resumindo, é uma tarefa corriqueira que será repetida em praticamente todos os formulários. Podemos criar uma função que arrume esse texto de maneira bem simples:

Function EspacosArrumados(Texto As String)
    EspacosArrumados = Trim(Texto)
    Do While InStr(EspacosArrumados, "  ")
        EspacosArrumados = Replace(EspacosArrumados, "  ", " ")
    Loop
End Function

Essa função será usada da seguinte forma:

Private Sub txtNome_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    frmCadastro.txtNome = EspacosArrumados(frmCadastro.txtNome)
End Sub

Essa função certamente atenderá muitas necessidades. Podemos ainda aperfeiçoar a função, acrescentando um parâmetro adicional para o caso de querer que o texto seja convertido em maiúsculas, minúsculas ou iniciais maiúsculas e o resto em minúsculas, evitando que essa codificação seja feita no módulo do formulário. Esse parâmetro pode vir na forma de enumeração:

Enum enumConversao
    Nenhuma = 0
    Maiuscula = 1
    Minuscula = 2
    IniciaisMaiusculas = 3
    PrimeiraMaiuscula = 4
End Enum
Function EspacosArrumados(Texto As String, _
    Optional Conversao As enumConversao = Nenhuma) As String
    EspacosArrumados = Trim(Texto)
    Do While InStr(EspacosArrumados, "  ")
        EspacosArrumados = Replace(EspacosArrumados, "  ", " ")
    Loop
    Select Case Conversao
        Case Maiuscula
            EspacosArrumados = UCase(EspacosArrumados)
        Case Minuscula
            EspacosArrumados = LCase(EspacosArrumados)
        Case IniciaisMaiusculas
            EspacosArrumados = StrConv(EspacosArrumados, vbProperCase)
        Case PrimeiraMaiuscula
            EspacosArrumados = UCase(Left$(EspacosArrumados, 1)) & _
                LCase(Mid$(EspacosArrumados, 2, Len(EspacosArrumados) - 1))
    End Select
End Function

O parâmetro Conversao foi criado como opcional, usando a opção Nenhuma como padrão. Assim, se o campo não precisar de conversão basta não acrescentar o parâmetro.

O mesmo processo pode ser utilizado para campos com formatos específicos, como datas. Neste caso temos duas abordagens: quando o número está sendo digitado e quando sai do campo. O segundo caso é mais simples, pois apenas efetua uma validação de data, podendo inclusive verificar se a data é passada ou futura, de acordo com a necessidade. Esta abordagem será vista mais adiante.

Quando vamos formatar um campo numérico pelo próprio módulo do formulário, o código normalmente é algo assim:

Private Sub txtDataNascimento_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
            If Me.txtDataNascimento.SelStart = 2 Or Me.txtDataNascimento.SelStart = 5 _
                Then
                Me.txtDataNascimento.SelText = "/"
            End If
        Case Else
            KeyAscii = 0
    End Select
End Sub

Entretanto, para fazer o mesmo efeito em um módulo à parte é preciso fazer uma abordagem diferente. Observe o código a seguir:

Function DataFormatada(ValorAtual As String, Tecla As MSForms.ReturnInteger) As String
    Dim Digito As String
    Dim Valor As String
    Dim Comprimento As Integer
    Select Case Tecla
        Case Asc("0") To Asc("9")
            Digito = Chr$(Tecla)
        Case Else
            Digito = ""
    End Select
    Valor = Replace(ValorAtual, "/", "") & Digito
    Comprimento = Len(Valor)
    If Comprimento > 4 Then
        Valor = Left$(Valor, 2) & "/" & Mid$(Valor, 3, 2) _
            & "/" & Mid$(Valor, 5, Comprimento - 4)
    ElseIf Comprimento > 2 Then
        Valor = Left$(Valor, 2) & "/" & Mid$(Valor, 3, Comprimento - 2)
    End If
    If Len(Valor) > 10 Then
        Valor = Left$(Valor, 10)
    End If
    DataFormatada = Valor
End Function

A função recebe dois parâmetros: ValorAtual e Tecla. ValorAtual será o conteúdo atual do campo de data que recebe um novo dígito, enquanto Tecla é o caractere recebido. No começo há um Select Case para verificar se Tecla é numérico ou não. Caso positivo, armazena na variável Digito. Depois a variável Valor recebe o conteúdo do parâmetro ValorAtual sem as barras separadoras da data. Mais adiante Comprimento recebe o tamanho do texto de Valor, que recebe as barras separadoras de acordo com o tamanho. Por fim há ainda uma validação para ver se o comprimento final passou de 10, limitando Valor aos 10 primeiros dígitos.

Agora podemos substituir o código do evento de pressionamento de tecla para que o campo receba o conteúdo da função. Em tese, precisaríamos de apenas uma linha de código, mas há uma segunda. Observe:

Private Sub txtDataNascimento_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Me.txtDataNascimento.Value = DataFormatada(Me.txtDataNascimento.Value, KeyAscii)
    KeyAscii = 0
End Sub

Lembre-se que a sub-rotina se refere a um evento e que a variável KeyAscii é o caractere digitado. Se não houver nenhum tratamento nessa variável, seu conteúdo é acrescentado ao final do campo. Por isso devemos associar o valor 0 para que o caractere digitado não seja duplicado.

A validação da data normalmente é efetuada quando saímos do campo. Vamos criar uma função que receba dois parâmetros: a data a ser validada e uma enumeração que indique se a data que queremos validar é passado, futuro ou tanto faz, pois datas de nascimento devem pertencer ao passado, assim como novas datas de pagamento devem pertencer ao futuro. Vejamos:

Enum enumPeriodoData
    Nenhum = 0
    Passado = 1
    Futuro = 2
End Enum
Function DataValidada(ValorData As String, _
    Optional PeriodoData As enumPeriodoData = Nenhum) As Boolean
    If Not IsDate(ValorData) Then
        DataValidada = False
        Exit Function
    End If
    Select Case PeriodoData
        Case Nenhum
            DataValidada = True
        Case Passado
            If CDate(ValorData) < Now Then
                DataValidada = True
            Else
                DataValidada = False
            End If
        Case Futuro
            If CDate(ValorData) > Now Then
                DataValidada = True
            Else
                DataValidada = False
            End If
    End Select
End Function

Perceba que esta função só indicará se a data é válida ou não a partir dos parâmetros recebidos. Não indicará se o erro é uma data inválida ou se ela está fora do intervalo exigido para o campo. Neste caso o ideal é ter uma variável Mensagem onde possamos escrever uma mensagem de erro para ser exibida no formulário. Nos casos em que não houver erro será preciso apagar a mensagem para que não exiba uma mensagem antiga. Entretanto, será preciso que essa variável Mensagem seja pública, para poder ser acessada por todo o projeto. Uma alternativa mais elegante é transformar todo o módulo com as validações de dados para um módulo de classe, que servirá como um repositório de funções de validação de dados.

Comece seu módulo validador de dados com uma ou duas funções e vá substituindo as existentes de um projeto, verificando se o funcionamento está normal e nenhum bug apareceu. Com o tempo, vai acrescentando mais algumas funções e fazendo o mesmo, até o momento em que todas suas validações estejam presentes no módulo. Assim, quando for iniciar algum projeto novo, importe esse módulo validador e uma boa parte do seu trabalho já estará pronta, bastando usar as funções existentes, testadas e aprovadas em projetos anteriores.

Para dúvidas sobre o artigo, comentários ou sugestões, utilize os comentários abaixo. Até o próximo artigo!

Pedro Martins



Pós-graduando em Business Intelligence e Big Data pela Faculdade Impacta de Tecnologia. Formado em Tecnologia em Eletrônica Digital com Ênfase em Microprocessadores
- - - - -
#120 - Excel VBA - Tratamento de erros

Nessa aula vou ensinar a fazer o tratamento de erros da planilha de conexão com o Banco de Dados do Access para evitar que o usuário receba erros e o projeto trave desativando funções importantes do aplicativo. 

Conteúdo da aula:

 - Análise de como o tratamento de erros pode ser feito
 - Criando as rotinas de tratamento
 - Instrução On error Goto / On Error resume
 - Destivando o tratamento do erro
 - Instrução Error$





Espero que goste do conteúdo.
Bons estudos!

Se gostou compartilhe com seus colegas de trabalho e amigos!

Acesso as planilhas: 
www.sigaonerd.com

Facebook / Twitter

Inscreva-se em meu canal de vídeos no Youtube clicando aqui 

Microsoft Excel é um produto do pacote Microsoft Office
-------------------------------------------------------
1)  Tenha acesso a mais de 465 vídeos tutoriais em meu canal de vídeos no Youtube. Clique aqui e conheça o site que criei com o catálogo das aulas dos cursos completos que gravei!

2) Clique aqui para ter acesso ao download de centenas de planilhas e apostilas que criei (tudo gratuito)


Bons estudos!
- - - -
#119 - Excel VBA - Corrigindo bugs do código

Nessa aula vou ensinar como corrigir bugs no código. Mostrarei algumas práticas para facilitar a busca de erros e correção. 

Conteúdo da aula:

 - Boas práticas antes da entrega do programa
 - Teste das rotinas
 - identificação de erros
 - O uso da janela de verificação imediata 
 - Corrigindo efetivamente os problemas




Espero que goste do conteúdo.
Bons estudos!

Se gostou compartilhe com seus colegas de trabalho e amigos!

Acesso as planilhas: 
www.sigaonerd.com

Facebook / Twitter

Inscreva-se em meu canal de vídeos no Youtube clicando aqui 

Microsoft Excel é um produto do pacote Microsoft Office
-------------------------------------------------------
1)  Tenha acesso a mais de 465 vídeos tutoriais em meu canal de vídeos no Youtube. Clique aqui e conheça o site que criei com o catálogo das aulas dos cursos completos que gravei!

2) Clique aqui para ter acesso ao download de centenas de planilhas e apostilas que criei (tudo gratuito)


Bons estudos!
- - - -