Notifications
Clear all

Ativar/Desativar AutoFilter de outra ABA não Ativa

2 Posts
2 Usuários
0 Reactions
1,032 Visualizações
(@kaleo_rs)
Posts: 0
New Member
Topic starter
 

Boa tarde,

Não estou conseguindo selecionar as células de outra ABA (NÃO ATIVA) e HABILITAR/DESABILITAR os filtros. Bem como também não consigo fazer Ordenação dessa mesma aba.

O código abaixo é o procedimento do processo.

*****************************************************************************************************
Private Sub Montar_Agenda()
'
    Dim xAGENDA_CRMV As Integer
    Dim xAGENDA_CIDADE As String
    Dim xAGENDA_ROTA As String
    Dim xAGENDA_DATA_ULT As Date
    Dim xAGENDA_DATA_PRO As Date
'
    Dim xCRMV1 As Integer
    Dim xCRMV2 As Integer
    Dim xData_Atual As Date
    Dim xGrava As String
'
    xData_Atual = Format(Now, "DD/MM/YYYY")
'
    Application.ScreenUpdating = False
'
''********************************************************************************************************************************************************************************
'NESTE PONTO NÃO CONSIGO FAZER A SELEÇÃO E DESATIVAR OS FILTROS DA ABA "ROTAS" POR ELA NÃO ESTAR ATIVA E NEM PODE ESTAR NESSE MOMENTO
'
    With ThisWorkbook
     On Error Resume Next
      .Worksheets("ROTAS").Range("A2:J2").SpecialCells(xlCellTypeConstants).Select
    End With
    If ActiveSheet.AutoFilterMode = True Then ' VERIFICA SE O FILTRO ESTA ATIVADO, CASO SIM DESATIVA
        Selection.AutoFilter
    End If
'
'*************************************************************************************************************************************************************
'NESTE PONTO NÃO CONSIGO FAZER A SELEÇÃO E ORDENAR AS INFORMAÇÕES DA ABA "ROTAS" QUE NÃO ESTÁ ATIVA E NEM PODE ESTAR.
'
    xLin = Application.WorksheetFunction.CountA(Sheets("ROTAS").Columns(3)) + 1
   Range("A2:V" & xLin).Select
    ActiveWorkbook.Worksheets("ROTAS").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("ROTAS").Sort.SortFields.Add Key:=Range("I3:I" & xLin) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("ROTAS").Sort.SortFields.Add Key:=Range("J3:J" & xLin) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("ROTAS").Sort
        .SetRange Range("A2:V" & xLin)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'
'*************************************************************************************************************************************************************
' A PARTIR DESTE PONTO TUDO FUNCIONA BEM
'
    With ThisWorkbook
     On Error Resume Next
      .Worksheets("aux").Range("A1:K1000").SpecialCells(xlCellTypeConstants).ClearContents
      Application.Goto ActiveWorkbook.Sheets("aux").Range(1, 1)
    End With
'
    xData = DateSerial(Year(Now), Month(Now), 1) ' PRIMEIRO DIA DO MÊS E ANO ATAUL
    If xData <= xData_Atual Then
        xlin2 = Application.WorksheetFunction.CountA(Sheets("HISTORICO").Columns(1))
        Do Until xlin2 = 1
            xData = Sheets("HISTORICO").Cells(xlin2, "A")
            If Format(Month(Format(xData, "DD/MM/YYYY")), "00") >= Format(Month(Format(Now, "DD/MM/YYYY")), "00") Then
                If xData <= xData_Atual Then
                    xAGENDA_DATA_ULT = Format(Sheets("HISTORICO").Cells(xlin2, 1), "DD/MM/YY")
                    xAGENDA_CRMV = CStr(Sheets("HISTORICO").Cells(xlin2, 2)) ' CONVERTER O CRMV DE NUMERO PARA TEXTO
                    xAGENDA_CIDADE = Application.WorksheetFunction.VLookup(xAGENDA_CRMV, Sheets("ROTAS").Range("A3:G1000"), 7, False)
                    xAGENDA_ROTA = Application.WorksheetFunction.VLookup(xAGENDA_CRMV, Sheets("ROTAS").Range("A3:H1000"), 8, False)
                    xAGENDA_TIPO_ROTA = Format(Sheets("HISTORICO").Cells(xlin2, 8), "DD/MM/YY")
                    If xAGENDA_TIPO_ROTA = "R" Then
                        xLin = Application.WorksheetFunction.CountA(Sheets("aux").Columns(1)) + 1 ' LOCALIZA A PRÓXIMA LINHA EM BRANCO
                        Sheets("aux").Cells(xLin, 1) = xAGENDA_CRMV
                        Sheets("aux").Cells(xLin, 2) = xAGENDA_CIDADE
                        Sheets("aux").Cells(xLin, 3) = xAGENDA_ROTA
                        Sheets("aux").Cells(xLin, 4) = xAGENDA_DATA_ULT
                    End If
                End If
                xlin2 = xlin2 - 1
            Else
                Exit Do
            End If
        Loop
    End If
'
    xlin1 = 3
    Do Until Sheets("ROTAS").Cells(xlin1, "I") = ""
'
        xAGENDA_DATA_PRO = Format(Sheets("ROTAS").Cells(xlin1, "I"), "DD/MM/YY")
'
        xGrava = "N"
        If xAGENDA_DATA_PRO > xData_Atual Then
            xGrava = "S"
        Else
            xGrava = "S"
            xLin = 1
            Do Until Sheets("aux").Cells(xLin, "D") = ""
                If xAGENDA_DATA_PRO = Format(Sheets("aux").Cells(xLin, "d"), "DD/MM/YY") Then
                    xGrava = "N"
                    Exit Do
                End If
                xLin = xLin + 1
            Loop
        End If
        If xGrava = "S" Then
            xAGENDA_CRMV = CStr(Sheets("ROTAS").Cells(xlin1, 1))
            xAGENDA_CIDADE = UCase(Sheets("ROTAS").Cells(xlin1, 7))
            xAGENDA_ROTA = UCase(Sheets("ROTAS").Cells(xlin1, 8))
            xLin = Application.WorksheetFunction.CountA(Sheets("aux").Columns(1)) + 1 ' LOCALIZA A PRÓXIMA LINHA EM BRANCO
            Sheets("aux").Cells(xLin, 1) = xAGENDA_CRMV
            Sheets("aux").Cells(xLin, 2) = xAGENDA_CIDADE
            Sheets("aux").Cells(xLin, 3) = xAGENDA_ROTA
            Sheets("aux").Cells(xLin, 4) = xAGENDA_DATA_PRO
        End If
        xlin1 = xlin1 + 1
'
    Loop
'
    ActiveWorkbook.Worksheets("aux").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("aux").Sort.SortFields.Add Key:=Range("D1:D1000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("aux").Sort.SortFields.Add Key:=Range("B1:B1000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("aux").Sort.SortFields.Add Key:=Range("C1:C1000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("aux").Sort
        .SetRange Range("A1:D1000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'
''***********************************************************************************************************************************************************************************
'NESTE PONTO NÃO CONSIGO FAZER A SELEÇÃO E VOLTAR ATIVAR OS FILTROS DA ABA "ROTAS" POR ELA NÃO ESTAR ATIVA E NEM PODE ESTAR NESSE MOMENTO
'
'    With ThisWorkbook
'     On Error Resume Next
'      .Worksheets("ROTAS").Range("A2:J2").SpecialCells(xlCellTypeConstants).Select
'    End With
'    If ActiveSheet.AutoFilterMode = False Then ' VERIFICA SE O FILTRO ESTA ATIVADO, CASO SIM DESATIVA
'        Selection.AutoFilter
'    End If
'
    Application.ScreenUpdating = True
'
End Sub
 
Postado : 08/08/2017 1:14 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Kaleo_rs,

Bom dia!

Solicitamos, por gentileza, da próxima vez que postar códigos VBA aqui no fórum, utilizar a TAG CODE existente acima da caixa de mensagens.

Quanto a sua dúvida, nesses pontos onde você não consegue ativa a aba necessária, indique o caminho completo da aba. Por exemplo, nessa linha:

If ActiveSheet.AutoFilterMode = True Then

Altere para:

If Sheets("ROTAS").AutoFilterMode = True Then

Se isso não der certo, então terá que, antes do ponto onde iniciará o que você quer fazer, ativar a aba que deverá ser processada com, por exemplo, "Sheets ("ROTAS").Select.

Como você está utilizando Application.ScreenUpdating = False logo no início do código, a mudança entre as abas não será visível para o usuário final.

 
Postado : 09/08/2017 5:10 am