Transpor evento change para função


#1

Boa tarde meus caros.

Estou tentando criar um sistema de filtragem e alteração de registros no excel. Consegui criar uma macro com o evento CHANGE para realizar um filtro avançado com base nos valores que eu insiro em uma determinada linha da minha planilha. Porem gostaria de criar um form para que ao ser preenchido com alguns valores, ele executasse essa minha macro e trouxesse esses valores em uma outra planilha, mas ao tentar executar isso em meu form ele não permite pois a macro esta como change, haveria como transformar em função para que eu chamasse essa função em meio ao codigo? Segue a função criada. Agradeço desde já a ajuda.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range
Dim Cell As Range

Set rng = Sheets(“Dados em Branco”).Range(“C2:F3”)

For Each Cell In rng

If Target.Address = Cell.Address Then

    Application.EnableEvents = False
    
    Range("a5").CurrentRegion.AdvancedFilter _
    Action:=xlFilterInPlace, CriteriaRange:=rng, _
    Unique:=False
    
    Application.EnableEvents = True

End If

Next Cell

End Sub


#2

Fala, @adeilson. Tudo bem?

Você pode colocar este código em uma sub com o nome que você quiser e chamar ela no evento Change e no botão do form, por exemplo.


#3

tentei fazer dessa forma @xavier, porem o if ali só funciona quando uso o target.address que instanciei logo no inicio no evento change, por isso quando eu tento criar uma função ele retorna com erro.


#4

Você pode simplesmente criar um código igual dentro do evento Click de um botão no form. A diferença é que não vai existir o Target que dispara o evento Change. Você vai ter que colocar uma referência ali de acordo com o que deseja fazer. Ou seja, no Change, deixa o Target, no form, utilize outra referência.


#5

Opa consegui resolver sim, era bem isso mesmo, somente para concluir, como eu faço para testar varias opções de célula nesse mesmo código ? Tipo

If ThisWorkbook.Sheet(“Planilha1”).Range(“C3”, “D3”, “E3”) = Cell.Address Then

Application.EnableEvents = False

Range("a5").CurrentRegion.AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=rng, _
Unique:=False

Application.EnableEvents = True

End If


#6

Você precisa testar um por vez utilizando o operador lógico, Or. Por exemplo:

If ThisWorkbook.Sheet(“Planilha1”).Range(“C3”) = Cell.Address Or ThisWorkbook.Sheet(“Planilha1”).Range(“D3”) = Cell.Address Or ThisWorkbook.Sheet(“Planilha1”).Range(“E3”) = Cell.Address Then


#7

Tranquilo, valeu mesmo pela força.