Olá ! Sou leigo em programação e estou engatinhando em VBA por conta própria fazem alguns dias
Criei um código para a partir de uma lista de caracteres especiais relacionados na coluna A na sheet "Base Caracteres", encontrá-los e marcá-los na sheet "Base Validação".
Apesar de possivelmente o código não ser o mais enxuto ou mais adequado, ele funciona corretamente até que não encontre um dos caracteres pesquisados, dando o erro run-time 91.
Já tentei usar a função On Error GoTo, que deu certo no primeiro Loop, porém a partir do segundo caracter não encontrado, não funciona mais.
Tentei a função If Not "Variável" is Nothing Then, porém não consegui fazer funcionar.
Gostaria muito da valiosa ajuda de vocês para fazer com que o código escrito funcione, e dessa forma poderei entendê-lo e posteriormente aprimorá-lo.
Segue o código:-
Sub Macro1()
'Declara Variáveis
Dim W1 As Worksheet
Dim W2 As Worksheet
Dim P As Long
Dim S As String
Dim V As String
Dim L As String
'Inicializa variáveis
Set W1 = Sheets("Base Validação")
Set W2 = Sheets("Base Caracteres")
L = 1
V = W2.Range("A" & L).Value
'Inicia rotina de Loop que buscará o valor (S) a ser procurado
Do While V <> ""
S = W2.Range("A" & L).Value
W1.Select
Range("A2").Select
'Inicia a busca do valor adicionado à variável S em toda a Sheet "Base Validação" Cells.Find(What:=S, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
'Muda a cor da célula onde o valor foi encontrado
With ActiveCell.Font
.Color = 255
.Bold = True
End With
'Muda a cor da linha onde o valor foi encontrado
With ActiveCell.EntireRow.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'Inicia a variável "P" com o valor da célula ativa (será usada como marcação)
P = ActiveCell.Row
'Inicia o Loop da rotina Find Next
Do
Cells.FindNext(After:=ActiveCell).Activate
'Muda a cor da célula onde o valor foi encontrado
With ActiveCell.Font
.Color = 255
.Bold = True
End With
'Muda a cor da linha onde o valor foi encontrado
With ActiveCell.EntireRow.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With 'Realiza o Loop de forma a continuar procurando "S" em todas as células enquanto a célula ativa for maior que P
Loop While ActiveCell.Row > P
'Atualiza a variável L em 1 para avançar para a próxima linha da sheet "Base Caracter" e carregar o novo valor de "S"
Pergunta
Rogerio Barbosa
Olá ! Sou leigo em programação e estou engatinhando em VBA por conta própria fazem alguns dias
Criei um código para a partir de uma lista de caracteres especiais relacionados na coluna A na sheet "Base Caracteres", encontrá-los e marcá-los na sheet "Base Validação".
Apesar de possivelmente o código não ser o mais enxuto ou mais adequado, ele funciona corretamente até que não encontre um dos caracteres pesquisados, dando o erro run-time 91.
Já tentei usar a função On Error GoTo, que deu certo no primeiro Loop, porém a partir do segundo caracter não encontrado, não funciona mais.
Tentei a função If Not "Variável" is Nothing Then, porém não consegui fazer funcionar.
Gostaria muito da valiosa ajuda de vocês para fazer com que o código escrito funcione, e dessa forma poderei entendê-lo e posteriormente aprimorá-lo.
Segue o código:-
Sub Macro1()
'Declara Variáveis
Dim W1 As Worksheet
Dim W2 As Worksheet
Dim P As Long
Dim S As String
Dim V As String
Dim L As String
'Inicializa variáveis
Set W1 = Sheets("Base Validação")
Set W2 = Sheets("Base Caracteres")
L = 1
V = W2.Range("A" & L).Value
'Inicia rotina de Loop que buscará o valor (S) a ser procurado
Do While V <> ""
S = W2.Range("A" & L).Value
W1.Select
Range("A2").Select
'Inicia a busca do valor adicionado à variável S em toda a Sheet "Base Validação"
Cells.Find(What:=S, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
'Muda a cor da célula onde o valor foi encontrado
With ActiveCell.Font
.Color = 255
.Bold = True
End With
'Muda a cor da linha onde o valor foi encontrado
With ActiveCell.EntireRow.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'Inicia a variável "P" com o valor da célula ativa (será usada como marcação)
P = ActiveCell.Row
'Inicia o Loop da rotina Find Next
Do
Cells.FindNext(After:=ActiveCell).Activate
'Muda a cor da célula onde o valor foi encontrado
With ActiveCell.Font
.Color = 255
.Bold = True
End With
'Muda a cor da linha onde o valor foi encontrado
With ActiveCell.EntireRow.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'Realiza o Loop de forma a continuar procurando "S" em todas as células enquanto a célula ativa for maior que P
Loop While ActiveCell.Row > P
'Atualiza a variável L em 1 para avançar para a próxima linha da sheet "Base Caracter" e carregar o novo valor de "S"
L = L + 1
Loop
End Sub
Erro ortográfico
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.