Código VBA (Condiçã...
 
Notifications
Clear all

Código VBA (Condição) não funciona

6 Posts
3 Usuários
0 Reactions
996 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá, boa noite.

Aos colegas de plantão gostaria de tirar uma dúvida. Recentemente tive uma dúvida solucionada aqui no forum, ressalto que a solução funciona perfeitamente. Mas acontece que a gente fica satisfeito com as soluções e começa a criar em cima dessa soluções. A questão tratava de uma forma de bloquear o conteúdo de determinada coluna que, no título tivesse o texto "Valor Atual". Acontece que surgiram várias idéias para adaptar o código da solução.

Uma dela foi fazer o bloqueio desde que no título ouvesse um asterisco (*). Peguei o código e alterei o texto em parênteses. Mas não funcionou, por isso minha dúvida.

Segue o código original:

        'Condição        
        If Mid(Cells(1, iCol).Value, 1, 11) = "Valor Atual"  Then
         myCol = GetColumnLetter(iCol)

E minha adaptação:

        'Condição        
        If Mid(Cells(1, iCol).Value, 1, 11) = "*"  Then
         myCol = GetColumnLetter(iCol)

Por que a adaptação não funciona ?

Obrigado a todos!

Agradecimentos: Mauro Coutinho e Edson

 
Postado : 15/04/2015 5:15 pm
(@edcronos)
Posts: 1006
Noble Member
 

asterisco (*)
é considerado como um coriga

tipo
vc quer procurar qualquer palavra que comece com A
A*

dentro do proprio excel tbm é assim ou é sinal de multiplicação ou caractere coringa

então sua linha de comando acaba passando direto, pq o seu ( = "*") é a mesma coisa que "=*(qualquer coisa)"
potanto sempre vai dar verdadeiro para a expressão

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 15/04/2015 6:23 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Então eu deveria procurar pelo código do caracter * ?. Como ficaria ?

 
Postado : 15/04/2015 6:35 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Luiz, se quer localizar somente o Caracter " * " asterisco altere conforme abaixo :

Troque esta linha :
If Mid(Cells(1, iCol).Value, 1, 11) = "Valor Atual" Then

pela :

If InStr(1, Cells(1, iCol), "*") Then

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/04/2015 8:44 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A solução do Mauro está correta, porém eu só trocaria uma coisinha, para facilitar o seu entendimento.
Por favor dedique o crédito da solução ao Mauro.

If InStr(1, Cells(1, iCol), "*")> 0 Then

Isso pq o instr devolve a posição do elemento procurado. No caso da forma como o Mauro escreveu, funciona pq o VBE converte 0 pra falso e qquer outro número pra verdadeiro. Ou seja, atende, mas dificulta o entendimento.

Se vc colocar o ">0" nao fará diferença nenhuma na execução, mas facilitará seu entendimento para futuros usos!

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/04/2015 9:47 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Dando um toque a mais, todos os caracteres tem seu representativo na tabela ASCII, sendo assim podemos utiliza-la para representa-lo utilizando a função CHR, então a linha que indiquei mais o complemento do Fernando poderia ser escrita da seguinte forma :

If InStr(1, Cells(1, iCol), Chr(42)) > 0 Then
Na tabela ASCII o Asterisco é representado pelo Dec 42, veja na tabela abaixo uma relação completa.

ASCII TABLE
http://www.techonthenet.com/ascii/chart.php

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 15/04/2015 10:18 pm