Rendere la macro valevole per tutti i fogli e automatica a prescindere dal foglio aperto

Anonimo
2015-03-09T14:39:29+00:00

Buongiorno, vorrei rendere questa macro valevole per tutti i fogli di una cartella di lavoro che si chiamano T1 T2 T3 T4 T5 T6 T7 F2 F3 F4 F5 F6 F7 F8 F9.

Praticamente mi ordina le righe di una tabella in funzione delle date presenti in una colonna.

Sarebbe bello che questi comandi venissero eseguiti automaticamente ogni volta che inserisco una data nuova nelle varie tabelle (che sono tutte uguali nei fogli)

al momento ho creato un pulsante che mi ordina tutto quando lo decido io.

Grazie

Anto

Sub ORDINADATEF4()

'

' ORDINADATE Macro

' ORDINA LE RIGHE DELLA TABELLA IN FUNZIONE DELLA DATA RICHIESTA

'

'

    Range("A3:M40").Select

    ActiveWorkbook.Worksheets("F4").Sort.SortFields.Clear

    ActiveWorkbook.Worksheets("F4").Sort.SortFields.Add Key:=Range("K4:K40"), _

        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("F4").Sort

        .SetRange Range("A3:M40")

        .Header = xlYes

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With

    Range("I4").Select

    ActiveCell.FormulaR1C1 = "12:00:00 AM"

    Range("I5").Select

    ActiveCell.FormulaR1C1 = "=IFERROR(R[-1]C+R[-1]C[1],"""")"

    Range("I5:J5").Select

    Selection.AutoFill Destination:=Range("I5:J40"), Type:=xlFillDefault

    Range("I5:J40").Select

    Range("E4").Select

    ActiveWindow.SmallScroll Down:=-12

    ActiveCell.FormulaR1C1 = "=IFERROR(R[-3]C[-3],"""")"

    Range("E5").Select

    ActiveCell.FormulaR1C1 = "=IFERROR(R[-1]C[7],"""")"

    Range("E5").Select

    Selection.AutoFill Destination:=Range("E5:E40"), Type:=xlFillDefault

    Range("E5:E40").Select

    Range("O9").Select

End Sub

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
2015-03-09T20:00:02+00:00

Ciao Antonino,

Innanzitutto, penso che sia necessario convertire la tua Discussione ad una Domanda.

Poi, prova qualcosa del genere:

In un modulo standard, incolla il seguente codice:

'=========>>

Option Explicit

'--------->>

Public Sub ORDINADATEF4(Sh As Worksheet)

    Dim WB As Workbook

    Set WB = ThisWorkbook

    arrSheets = Split(sSheets, ",")

    On Error GoTo XIT

    Application.EnableEvents = False

    With Sh

        With .Sort

            With .SortFields

                .Clear

                .Add Key:=Sh.Range("K4:K40"), _

                     SortOn:=xlSortOnValues, _

                     Order:=xlAscending, _

                     DataOption:=xlSortNormal

            End With

            .SetRange Range("A3:M40")

            .Header = xlYes

            .MatchCase = False

            .Orientation = xlTopToBottom

            .SortMethod = xlPinYin

            .Apply

        End With

        .Range("I4").FormulaR1C1 = "12:00:00 AM"

        .Range("I5").FormulaR1C1 = "=IFERROR(R[-1]C+R[-1]C[1],"""")"

        .Range("I5:J5").AutoFill Destination:=.Range("I5:J40"), _

                                 Type:=xlFillDefault

        .Range("E4").FormulaR1C1 = "=IFERROR(R[-3]C[-3],"""")"

        .Range("E5").FormulaR1C1 = "=IFERROR(R[-1]C[7],"""")"

        .Range("E5").AutoFill Destination:=.Range("E5:E40"), _

                              Type:=xlFillDefault

    End With

XIT:

    Application.EnableEvents = True

End Sub

'<<=========

Nel modulo di codice dell'oggetto ThisWorkbook, incolla:

'=========>>

Option Explicit

'--------->>

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Dim rngTabella As Range

    Dim arrSheets As Variant

    Dim i As Long

    Const sSheets As String = "T1,T2,T3,T4,T5,T6,T7,F2,F3,F4,F5,F6,F7,F8,F9"  

    Const sTabella As String = "A3:M40"                                                    '<<=== Modifica

    arrSheets = Split(sSheets, ",")

    For i = LBound(arrSheets) To UBound(arrSheets)

        If UCase(Sh.Name) = UCase(arrSheets(i)) Then

            Set rngTabella = Sh.Range(sTabella)

            If Not Intersect(Target, rngTabella) Is Nothing Then

                   Call ORDINADATEF4(Sh)

            End If

            Exit For

        End If

    Next i

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-03-10T08:05:35+00:00

    Ciao Mauro,

    Altro bicchiere di burbon.... ;-)

    Uscirò da S.Albans alcolizzato.....

    Certo - ma non sentirai  il freddo!

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-03-10T07:49:51+00:00

    <cut>

    Regards,

    Norman

    Altro bicchiere di burbon.... ;-)

    Uscirò da S.Albans alcolizzato.....

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-03-10T01:57:32+00:00

    Ciao Antonino,

    Buonasera,

    funziona alla perfezione!!

    Ti ringrazio per il cortese riscontro che è molto apprezzato!

    non so come cambiare la discussione in domanda,

    Vedi la Guida introduttiva di Microsoft Community

              http://answers.microsoft.com/it-it/page/gettingstarted

    Più in particolare, vedi la sezione intitolata Porre una nuova domanda o avviare una nuova discussione:

    '--------->> 

    Porre una nuova domanda o avviare una nuova discussione

    • Se la ricerca non ha fornito risposte o argomenti utili, è possibile porre la propria domanda o avviare una discussione. Tenere presente che alcune domande sono di difficile risoluzione e potrebbero richiedere più tempo per ricevere una risposta.
      1. Fare clic sul pulsante Formula una domanda nei risultati della ricerca.

    -oppure-

    Fare clic sul menu Partecipa e fare clic su Ricerca libera o Inizia una discussione. 2. In Titolo e Dettagli, digitare la domanda o l'argomento per esteso. Se si sta ponendo una domanda, includere le seguenti informazioni: - Il messaggio di errore esatto - Il programma e la versione - Il sistema operativo e la versione - Il browser e la versione - Tutti i software o hardware recentemente installati o rimossi - Tutte le recenti modifiche effettuate nel sistema - Le procedure già effettuate per cercare di risolvere il problema 3. Selezionare CategoriaVersioneArgomento. 4. Selezionare il pulsante di opzione Pubblica una domanda o Pubblica una discussione, come appropriato. 5. Fare clic su Invia. 6. Suggerimento: I forum di Microsoft Community sono pubblici. Non pubblicare post contenenti informazioni private, quali l'indirizzo di posta elettronica o il numero di telefono, se non espressamente richiesto da un moderatore dei forum in un messaggio privato. I messaggi privati sono visibili solo all'utente e ai moderatori dei forum. Visitare le domande frequenti per saperne di più sui Moderatori e altri ruoli del forum.

    ma in ogni  caso riterrei la discussione chiusa in quanto la risposta è stata veloce e perfetta.

    ringrazio di cuore

    Grazie ancora ma, per chiudere questo thread, ti chiederei di gentilmente segnare la risposta come Risposta. In questo modo, tu aiuterai anche coloro che potrebbero un domani cercare soluzioni ai problemi simili negli archivi della comunità. 

    Per una spiegazione di come chiudere un thread, vedi la seguente sezione della Guida introduttiva:

    '--------->>

    Promuovere i contenuti migliori

    • L'utente riceverà una notifica tramite messaggio di posta elettronica quando qualcuno nella community risponde al post. Se si è posta una domanda e la risposta risolve il problema, aprire il thread e contrassegnarla come risposta.
      1. Fare clic sul collegamento del thread nel messaggio di posta elettronica della notifica o trovare il thread nel proprio profilo.
      2. Fare clic sull'opzione Contrassegna come risposta .
      3. Suggerimento: Per visualizzare tutti i post a cui si è partecipato o che si desidera seguire, fare clic sul proprio nome visualizzato nella parte superiore di ogni pagina di Microsoft Community dopo aver effettuato l'accesso. Visitare le domande frequenti per saperne di più sulla gestione delle domande.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-03-09T21:12:52+00:00

    Buonasera,

    funziona alla perfezione!!

    non so come cambiare la discussione in domanda, ma in ogni  caso riterrei la discussione chiusa in quanto la risposta è stata veloce e perfetta.

    ringrazio di cuore

    Anto

    La risposta è stata utile?

    0 commenti Nessun commento