Macro che rimuove filtro automatico

Anonimo
2011-02-05T15:28:52+00:00

Salve, utilizzo questa parte di codice per verificare se in nel Foglio1 dal quale devo estrarre dati con un filtro avanzatoda copiare sul Foglio2, è in esecuzione un filtro automatico che risiede sulla colonna A. In questo caso lo rimuovo per poter operare sull'intero intervallo:

Workbooks("Mario".xls").Worksheets("Foglio1").Activate

Set sh = Worksheets("Foglio1")

With sh

    .Range("A1").Select

    If .FilterMode Then

        .Unprotect

        Selection.AutoFilter Field:=1

     End If

    .Range("A1:M3000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Foglio2.Range("A1:D2"), CopyToRange:=Foglio2.Range("A3"), Unique:=False

    .Range("A1").Select

    Selection.AutoFilter

    .Protect AllowSorting:=True, AllowFiltering:=True

In questo modo son riuscito a farlo funzionare; so che active e select "sono il male" come dici tu Mauro, ma poichè la macro (discretamente complessa, almeno per me) è lanciata da un altro file, se non attivo il Foglio1 di Mario e seleziono la cella A1 dove c'è materialmente la "freccetta" del filtro auotmatico per quanto mi sia scervellato e cercato aiuto in giro, non son riuscito a farla funzionare senza activate e select. C'è un modo?

Inoltre al termine della procedura, son costretto a rimettere il filtro automatico in A1 che altrimenti stranamente si perde usando 

  .Range("A1").Select

 Selection.AutoFilter

Ad ogni modo così mi funziona, ma chiarimenti per poter eseguire l'istruzione senza dover per forza attivare Mario e selezionare A1 sarebbero graditi.

Grazie per la risposta, ciao

Fabrizio

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-02-05T17:06:25+00:00

<cut>

In questo modo son riuscito a farlo funzionare; so che active e select "sono il male" come dici tu Mauro, ma poichè la macro (discretamente complessa, almeno per me) è lanciata da un altro file, se non attivo il Foglio1 di Mario e seleziono la cella A1 dove c'è materialmente la "freccetta" del filtro auotmatico per quanto mi sia scervellato e cercato aiuto in giro, non son riuscito a farla funzionare senza activate e select. C'è un modo?

Inoltre al termine della procedura, son costretto a rimettere il filtro automatico in A1 che altrimenti stranamente si perde usando 

  .Range("A1").Select

 Selection.AutoFilter

Ad ogni modo così mi funziona, ma chiarimenti per poter eseguire l'istruzione senza dover per forza attivare Mario e selezionare A1 sarebbero graditi.

Grazie per la risposta, ciao

Fabrizio

Ecco una possibile soluzionesenza tanti Select/Activate:

Public Sub m()

    Dim wk As Workbook

    Dim sh As Worksheet

    Dim sh2 As Worksheet

    Set wk = Workbooks("Mario.xls")

    Set sh2 = ThisWorkbook.Worksheets("Foglio2")

    With wk

        Set sh = .Worksheets("Foglio1")

    End With

    With sh

        .Range("A1").AutoFilter Field:=1, Criteria1:="a1"

         .Range("A1:M3000").AdvancedFilter _

            Action:=xlFilterCopy, _

            CriteriaRange:=sh2.Range("A1:D2"), _

            CopyToRange:=sh2.Range("A3"), _

            Unique:=False

        .Range("A1").AutoFilter Field:=1

    End With

    Set sh = Nothing

    Set sh2 = Nothing

    Set wk = Nothing

End Sub

Questo se, come mi sembra di aver capito, Mario.xls è il file che contiene la tabella da filtrare in Foglio1 e se il copia/incolla dei dati lo vuoi nel Foglio2 del files che contiene il codice.


--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-02-07T08:32:13+00:00

    Grazie mille.  Evidentemente nei miei tentativi mi ero perso qualcosa ... ritengo il set del wk "Mario" prima di effettuare il set del "Foglio1".

    PS unica cosa che ho dovuto ripristinare dal mio codice è che

    .Range("A1").AutoFilter Field:=1, Criteria1:="a1"

    non si esegue se prima non tolgo la protezione al foglio.

    Ciao e grazie ancora

    Fabrizio

    Ok. E ovviamente Criteria:="a1" filtra eventuali a1 presenti in colonna A. Il mio era solo un esempio che non teneva conto della eventuale protezione ma del problema del filtro.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-02-06T14:30:22+00:00

    Grazie mille.  Evidentemente nei miei tentativi mi ero perso qualcosa ... ritengo il set del wk "Mario" prima di effettuare il set del "Foglio1".

    PS unica cosa che ho dovuto ripristinare dal mio codice è che

    .Range("A1").AutoFilter Field:=1, Criteria1:="a1"

    non si esegue se prima non tolgo la protezione al foglio.

    Ciao e grazie ancora

    Fabrizio

    La risposta è stata utile?

    0 commenti Nessun commento