Notifications
Clear all

Filtro com Criterio de Periodo de Tempo VBA

5 Posts
3 Usuários
0 Reactions
1,453 Visualizações
(@escouboue)
Posts: 3
New Member
Topic starter
 

Olá pessoal tenho o seguinte codio para pegar 3 infomações de Filtro, uma da máquina e outra intervalo de tempo

Nessa situação mexo com duas planilha uma com o "ocorrido" e outra com qual material está funcionando o equipamento.

Fiz primerio uma macro executando esse comando e depois modifiquei ela para rodar com o criterio apresentado.

Ao aplicar os filtros os mesmos ficam parcialmente aplicados, pois quando vou verificar manualmente e aplico o filtro personalisado selecionado dá certo.

------------------------------------------------------------------------------

Selection.End(xlToLeft).Select
    Selection.End(xlToLeft).Select 'ir para o começo da planilha
    Dim valor As Single 'definir os valores de filto
    
    Dim maquina, maior, menor As Variant 'complemento de escrita do filtro
        
maquina = ActiveCell    'está selecionado
    'Selection.Copy
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsx").Activate 'vai para a planilha que tem o material em execução
    Application.Goto Reference:="R1C1"
    ActiveSheet.Range("$A$1:$R$3738").AutoFilter Field:=1, Criteria1:=maquina, Operator:=xlAnd  'esse filtro está funcionando
    Windows("Banco de Dados - teste.xlsm").Activate
    ActiveCell.Offset(0, 6).Range("A1").Select
    'Application.CutCopyMode = False
    

valor = ActiveCell  'pega o valor selecionado de tempo
menor = "<" & valor 'combina a escrita de menor igual com o valor da celula de tempo para usar no filto
    'Selection.Copy
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsx").Activate
    ActiveSheet.Range("$A$1:$R$3738").AutoFilter Field:=5, Criteria1:=menor, Operator:=xlAnd  'filtro é parcialmente apicado porem não excutado na macro
    'Application.ScreenUpdating = True 'TESTE
    Windows("Banco de Dados - teste.xlsm").Activate
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    'Application.CutCopyMode = False

valor = ActiveCell  'pega o valor selecionado de tempo
maior = ">" & valor 'combina a escrita de maior igual com o valor da celula de tempo para usar no filto
    'Selection.Copy
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsx").Activate
    ActiveSheet.Range("$A$1:$R$3738").AutoFilter Field:=6, Criteria1:=maior, Operator:=xlAnd 'filtro é parcialmente apicado porem não excutado na macro
    
    'Application.ScreenUpdating = True 'TESTE
    Application.Goto Reference:="R1C1"
    
    
    'programação para pegar o valor de pesquisa e copiar na outra planilha
    Selection.End(xlDown).Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveSheet.ShowAllData
    Windows("Banco de Dados - teste.xlsm").Activate
    Selection.End(xlToRight).Select
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveSheet.Paste
    ActiveCell.Offset(1, 0).Range("A1").Select

------------------------------------------------------------------------------------

 
Postado : 29/10/2019 12:57 pm
(@srobles)
Posts: 231
Estimable Member
 

escouboue,

Posso estar falando bobagem, mas para que o filtro funcione, aplicando os valores desejados, antes, você deve atribuir os valores ás suas variáveis (Variant) com a instrução SET, exemplo :

Dim maquina, maior, menor As Variant 'complemento de escrita do filtro

Set maquina = range("A1")
Set maior = 100
set menor = 50

E ao final da rotina, limpe as atribuições:

Set maquina = Nothing
Set maior = Nothing
set menor = Nothing

O pouco que conheço, variáveis do tipo Variant ( ou sem tipo declarado) devem ter seus valores atribuídos com a instrução Set, para só então, serem utilizadas durante o processamento do código / rotina.

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 29/10/2019 1:52 pm
(@escouboue)
Posts: 3
New Member
Topic starter
 

Infelizmente nem consegui rodar o codigo ao realizar a mudança sugerida fica dando erro de compilação

A principal parte do codigo ao dá erro é essa abaixo pois é como se o EXCEL não entendese que o filto deveser "<valor"
-------------------------------------------------------------------------------------------------
valor = ActiveCell 'pega o valor selecionado de tempo
menor = "<" & valor 'combina a escrita de menor igual com o valor da celula de tempo para usar no filto
'Selection.Copy
Windows("Cópia de Ordens MT set-18 a ago-19.xlsx").Activate
ActiveSheet.Range("$A$1:$R$3738").AutoFilter Field:=5, Criteria1:=menor, Operator:=xlAnd 'filtro é parcialmente apicado porem não excutado na macro
---------------------------------------------------------------------------------------------------

 
Postado : 30/10/2019 1:35 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

escouboue , por isso que sempre pedimos que postem um modelo, exemplo, muitas vezes só pelas rotinas é dificil se chegar a uma ajuda mais precisa.
Poste seu modelo em algum site de compartilhamento e coloque o link aqui.

[]s

 
Postado : 31/10/2019 6:49 am
(@escouboue)
Posts: 3
New Member
Topic starter
 

OK ! Coutinho obrigado pela dica, porem acabei conseguindo resolver o problema de forma muito mais simples e se não fossem esssas siples conversas no forum talvez nunca teria tido a ideia para resolver.

Ocodigo ababou ficandoa assim:
Ele não está 100% atimizado mas funcionou.

Acabei usando uma formatação condicional, que se as cores aparecessem na mesma linha ele filtrava ela de depois selecionava a informações que eu estava buscando

Selection.End(xlToLeft).Select
    Selection.End(xlToLeft).Select
    Selection.Copy
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsm").Activate
    Sheets("cores").Select
    Application.Goto Reference:="R2C1"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("Banco de Dados - teste.xlsm").Activate
    ActiveCell.Offset(0, 6).Range("A1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsm").Activate
    ActiveCell.Offset(0, 1).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("Banco de Dados - teste.xlsm").Activate
    ActiveCell.Offset(0, 1).Range("A1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsm").Activate
    ActiveCell.Offset(0, 1).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Planilha1").Select
    ActiveSheet.Range("$A$1:$R$3738").AutoFilter Field:=6, Criteria1:=RGB(255, _
        0, 0), Operator:=xlFilterCellColor
    ActiveSheet.Range("$A$1:$R$3738").AutoFilter Field:=5, Criteria1:=RGB(0, _
        176, 240), Operator:=xlFilterCellColor
    Application.Goto Reference:="R1C1"
    Selection.End(xlDown).Select
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    ActiveCell.Offset(0, 7).Range("A1").Select
    Selection.Copy
    ActiveCell.Offset(0, -1).Range("A1:B1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Banco de Dados - teste.xlsm").Activate
    Selection.End(xlToRight).Select
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveSheet.Paste
    ActiveCell.Offset(1, 0).Range("A1").Select
    
    Windows("Cópia de Ordens MT set-18 a ago-19.xlsm").Activate
    Application.CutCopyMode = False
    ActiveSheet.ShowAllData
    Windows("Banco de Dados - teste.xlsm").Activate
 
Postado : 31/10/2019 10:52 am