Condividi tramite

Excel - VBA - Intervallo di celle dinamico su altro foglio

Anonimo
2019-08-09T09:56:23+00:00

Buongiorno a tutti :-)

per selezionare un intervallo di celle su un altro foglio in modo dinamico (quindi con numero riga, numero colonna), utilizzo questo metodo:

Sheets("Foglio2").Activate

ActiveSheet.Range(Cells(SStartingRow, SStartingCol), Cells(SEndingRow, SEndingCol)).Select

In questo modo, però, genero uno "sfarfallio" dovuto al passaggio tra un foglio e l'altro: un effetto davvero brutto!

Qualcuno conosce un'alternativa?

Grazie a tutti!

Saluti

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
2019-08-09T10:09:16+00:00

Ciao Paolo,

Buongiorno a tutti :-)

per selezionare un intervallo di celle su un altro foglio in modo dinamico (quindi con numero riga, numero colonna), utilizzo questo metodo:

Sheets("Foglio2").Activate

ActiveSheet.Range(Cells(SStartingRow, SStartingCol), Cells(SEndingRow, SEndingCol)).Select

In questo modo, però, genero uno "sfarfallio" dovuto al passaggio tra un foglio e l'altro: un effetto davvero brutto!

Qualcuno conosce un'alternativa?

Per ovviare lo sfarfallio, prova a racchiudere il tuo codice nel modo seguente:

    Application.Screenupdating = False

         .\Tuo codice

    Application.Screenupdating = True

Detto questo, una soluzione migliore sarebbe quella di evitare la selezione di fogli di lavoro o intervalli; raramente è necessario effettuare selezioni ed è invariabilmente inefficiente farlo.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-08-09T12:10:41+00:00

    Ciao Paolo,

    Ho un dubbio, posso sostituire: 

    Set Rng1 = SH1.Range("A10:D20") con

    Set Rng1 = SH1.Range(cells(i,k), cells(r,s))?

    In genere, mi servono riferimenti dinamici :-)

    Certo, gli intervalli possono essere definiti come intervalli statici o dinamici: il mio codice di esempio era principalmente inteso a dimostrare che la selezione di fogli o intervalli non è necessaria.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-08-09T11:34:26+00:00

    Grazie mille Norman. 

    Ho un dubbio, posso sostituire: 

    Set Rng1 = SH1.Range("A10:D20") con

    Set Rng1 = SH1.Range(cells(i,k), cells(r,s))?

    In genere, mi servono riferimenti dinamici :-)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-08-09T11:02:13+00:00

    Ciao Paolo,

    Grazie Norman,

    la tua soluzione è perfetta.

    Bene, mi fa piacere! :-)

    Seleziono intervalli di celle su altri fogli per formattarli, riquadrarli, unirli, etc... perchè dici che è inefficiente e raramente necessario farlo?

    Quando vengono selezionati fogli di lavoro, intervalli o altri oggetti, Excel deve eseguire varie attività in background e questo può avere un impatto significativo sui tempi di esecuzione.

    Come esempio di come evitare le selezioni, considera il seguente codice che mette in grassetto il testo e colora lo sfondo degli intervalli su due fogli senza creare alcuna selezione:

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

    Option Explicit

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

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH1 As Worksheet, SH2 As Worksheet

        Dim Rng1 As Range, Rng2 As Range

        Set WB = ThisWorkbook

        With WB

            Set SH1 = .Sheets("Foglio1")

            Set SH2 = .Sheets("Foglio2")

        End With

        Set Rng1 = SH1.Range("A10:D20")

        Set Rng2 = SH2.Range("K1:K100")

        With Rng1

            .Font.Bold = True

            .Interior.Color = vbRed

        End With

        With Rng2

            .Font.Bold = True

            .Interior.Color = vbYellow

        End With

    End Sub

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

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-08-09T10:43:31+00:00

    Grazie Norman,

    la tua soluzione è perfetta.

    Seleziono intervalli di celle su altri fogli per formattarli, riquadrarli, unirli, etc... perchè dici che è inefficiente e raramente necessario farlo?

    La risposta è stata utile?

    0 commenti Nessun commento