Sfarfallio, non riesco ad evitarlo con la macro inserita all'interno di un foglio

Anonimo
2010-10-21T06:46:22+00:00

Buongiorno a tutti i mattinieri!!

Ho questa macro inserita direttamente all'interno di un foglio di lavoro e non in un modulo!

Funziona perfettamente ma non riesco, pur avendo inserito l'istruzione, ad evitare lo sfarfallio del video durante l'esecuzione della stessa.

Ho provato a posizionare

Application.ScreenUpdating = False

in diverse posizioni ma niente, continua a sfarfallare.

Quindi dopo diversi tentativi, chiedo aiuto ai nostri Oracoli del VBA!

Grazie e buona giornata

Andrea 

Private Sub Worksheet_Change(ByVal Target As Range)

'permette di trasformare le formule in valori

With Target

        If .Column = 32 Then

    Application.ScreenUpdating = False

            Cells(.Row, 3).Value = Cells(.Row, 3).Value

            Cells(.Row, 5).Value = Cells(.Row, 5).Value

            Cells(.Row, 24).Value = Cells(.Row, 24).Value

            Cells(.Row, 25).Value = Cells(.Row, 25).Value

            Cells(.Row, 26).Value = Cells(.Row, 26).Value

            Cells(.Row, 27).Value = Cells(.Row, 27).Value

            Cells(.Row, 28).Value = Cells(.Row, 28).Value

            Cells(.Row, 29).Value = Cells(.Row, 29).Value

            'Cells(.Row, 36).Value = Cells(.Row, 36).Value

            'Cells(.Row, 38).Value = Cells(.Row, 38).Value

            'Cells(.Row, 40).Value = Cells(.Row, 40).Value

            'Cells(.Row, 41).Value = Cells(.Row, 41).Value

            Cells(.Row, 42).Value = Cells(.Row, 42).Value

            Cells(.Row, 43).Value = Cells(.Row, 43).Value

            Cells(.Row, 45).Value = Cells(.Row, 45).Value

    End If

End With

On Error Resume Next

'Application.ScreenUpdating = True

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
2010-10-25T08:42:41+00:00

Buongiorno Mauro, perfetto! ho risolto ancora una volta grazie al tuo aiuto!Riassumo il modulo corretto, da inserire all'interno del foglio di lavoro:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.ScreenUpdating = False

   

    With Target

    If Target.Column = 4 Then

        Call m(.row)

        End If

    End With

End Sub

Private Sub m(byval lng as long)

    ' Dim lng As Long

       

       Cells(lng.Row, 3).Value = Cells(lng.Row, 3).Value

       Cells(lng.Row, 3).Value = Cells(lng.Row, 3).Value

   

End Sub

Grazie e buona giornata

 

 

Riassumo io, il tuo non è corretto:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.ScreenUpdating = False

    With Target

    If Target.Column = 4 Then

        Call m(.row)

        End If

    End With

End Sub

Private Sub m(byval lng as long)

    ' Dim lng As Long

       Cells(lng, 3).Value = Cells(lng, 3).Value

       Cells(lng, 3).Value = Cells(lng, 3).Value

End Sub


--

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

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-10-22T03:32:14+00:00

    ok la tua funziona, ovvio, ma la mia no!!

     

    Private Sub Worksheet_Change(ByVal Target As Range)

        Application.ScreenUpdating = False

       

        With Target

        If Target.Column = 4 Then

            Call m

            End If

        End With

    End Sub

    Private Sub m()

        ' Dim lng As Long

           

           Cells(.Row, 3).Value = Cells(.Row, 3).Value

           Cells(.Row, 3).Value = Cells(.Row, 3).Value

       

    End Sub

     

    Mi dice errore di compilazione! Aiuto.

    Inoltre che differenza c'è nell'inserire o meno il comando Do Events, visto che funziona ugualmente?

    Grazie 2000

    Anche la tua se passi ad m() come argomento la riga:

    Private Sub Worksheet_Change(ByVal Target As Range)

        Application.ScreenUpdating = False

        With Target

        If Target.Column = 4 Then

            Call m(.row)

            End If

        End With

    End Sub

    Private Sub m(byval lng as long)

        ' Dim lng As Long

           Cells(lng.Row, 3).Value = Cells(lng.Row, 3).Value

           Cells(lng.Row, 3).Value = Cells(lng.Row, 3).Value

    End Sub

    Questo se, come mi sembra di intuire, vuoi trasformare in valore il contenuto della colonna C della cella corrispondente alla riga di dove inserisci il dato in colonna 4. E sinceramente non capisco cosa abbia ache fare con tutto ciò DoEvents. Mah.


    --

    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
    2010-10-21T18:42:06+00:00

    ok la tua funziona, ovvio, ma la mia no!!

    Private Sub Worksheet_Change(ByVal Target As Range)

        Application.ScreenUpdating = False

        With Target

        If Target.Column = 4 Then

            Call m

            End If

        End With

    End Sub

    Private Sub m()

        ' Dim lng As Long

           Cells(.Row, 3).Value = Cells(.Row, 3).Value

           Cells(.Row, 3).Value = Cells(.Row, 3).Value

    End Sub

    Mi dice errore di compilazione! Aiuto.

    Inoltre che differenza c'è nell'inserire o meno il comando Do Events, visto che funziona ugualmente?

    Grazie 2000

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-10-21T10:03:42+00:00

    Si sono io che scrivo nella cella della colonna 32; appena sposto il cursone inizia l'operazione di sfarfallio, che dura poco, ma si vede!

    Prova a mettere la macro fuori dall'evento così:

    Private Sub Worksheet_Change(ByVal Target As Range)

        Application.ScreenUpdating = False

        If Target.Column = 5 Then

            Call m

        End If

    End Sub

    Private Sub m()

        Dim lng As Long

        For lng = 1 To 10000

            Range("A" & lng).Value = lng

        Next

    End Sub

    Modifica i riferimenti con i tuoi(il mio è solo un esempio per evitare lo sfarfallio). Fai sapere se hai risolto, grazie.

    NOTA. Come ti è già stato risposto in altra sede, quando esci dalla routine, Application.ScreenUpdating viene settato automaticamente a True.


    --

    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
  4. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni