Condividi tramite

Excel 2007 - Application.ScreenUpdating

Anonimo
2014-02-24T09:37:59+00:00

Ciao,

ho una macro che mi ricerca un termine su un DB e me lo evidenzia.

Il termine è presente anche in colonne nascoste, che tuttavia non voglio che sia evidenziato.

Per evitare l'effetto di dover vedere il cursore muoversi nelle celle nascoste, e per accelerare i tempi della macro ho provato a impostare il comando Application.ScreenUpdating sia all'inizio della macro che prima della ricerca vera e propria.

Il risultato non è cambiato vedo sempre il cursore muoversi sulle celle non mi interessano e i tempi non si accorciano.

Ho fatto girare lo stesso file su excel 10 e il problema non si verifica. Il passaggio da una cella all'altra è immediato.

Come si può risolvere?

Grazie mille e buona giornata

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
2014-02-24T16:13:29+00:00

Ciao,

ho una macro che mi ricerca un termine su un DB e me lo evidenzia.

Il termine è presente anche in colonne nascoste, che tuttavia non voglio che sia evidenziato.

Per evitare l'effetto di dover vedere il cursore muoversi nelle celle nascoste, e per accelerare i tempi della macro ho provato a impostare il comando Application.ScreenUpdating sia all'inizio della macro che prima della ricerca vera e propria.

Il risultato non è cambiato vedo sempre il cursore muoversi sulle celle non mi interessano e i tempi non si accorciano.

Ho fatto girare lo stesso file su excel 10 e il problema non si verifica. Il passaggio da una cella all'altra è immediato.

Come si può risolvere?

Grazie mille e buona giornata

Ci sarà sicuramente qualcosa nel tuo codice che crea il problema.

La macro qui sotto inserisce valori nelle celle di tutti i fogli presenti nel Workbook. Ho forzato la selezione dei Fogli, la loro visualizzazione se sono nascosti, la selezione di ciascuna cella (cose che non andrebbero mai fatte!) per valutare se settando Application.ScreenUpdating = False si veda comunque qualcosa (sono le righe in grassetto):

Public Sub m()

    Dim sh As Worksheet

    Dim lng As Long

    Application.ScreenUpdating = False

    For Each sh In ThisWorkbook.Worksheets

        sh.Visible = xlSheetVisible

        sh.Select

        For lng = 1 To 1000

            sh.Cells(lng, 1).Select

            sh.Cells(lng, 1).Value = lng

        Next

        If sh.Name <> "Foglio1" Then

            sh.Visible = xlSheetVeryHidden

        End If

    Next

    Application.ScreenUpdating = True

    Set sh = Nothing

End Sub

In Excel 2007 (ma in qualsiasi altra versione) non vedo assolutamente nulla. Rimane sempre e solo selezionato il Foglio1 fino alla fine della procedura.

Sarebbbe interessante, come ha scritto Norman, vedere il tuo codice e capire *dove* hai inserito Application.ScreenUpating = False

La risposta è stata utile?

0 commenti Nessun commento

15 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-02-24T17:53:56+00:00

    Ciao Mauro,

    ho provato a far girare la macro che mi hai inviato.

    Copiata e incollata su un file vuoto, vedo scorrere i numeri e il cursore.

    Possibile che il problema derivi dal fatto che non abbia attivo su VBA qualche reference/controllo aggiuntivo?

    Grazie mille ancora

    Generoso

    Come già scritto in precedenza, i vari Select/Activate sarebbero sempre da evitare.

    Quindi, confermi che inserendo il mio codice in un nuovo file ed eseguendolo più volte, vedi sempre *tutti* gli steps a video?

    Hai provato a ripristinare Office? Vedi:

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-02-24T17:30:23+00:00

    Ciao Mauro,

    ho provato a far girare la macro che mi hai inviato.

    Copiata e incollata su un file vuoto, vedo scorrere i numeri e il cursore.

    Possibile che il problema derivi dal fatto che non abbia attivo su VBA qualche reference/controllo aggiuntivo?

    Grazie mille ancora

    Generoso

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-02-24T17:23:29+00:00

    Innanzitutto grazie della tempestività. Vi riporto di seguito il codice di cui vi parlavo.

    Non sono un programmatore e anche definirmi amatoriale mi sembra un parolone, perciò non vi stupite della rozzezza del codice.

    Il problema principale che mi interessa risolvere, al di la di tutta la prima parte del codice che impone delle condizioni per ripetere la macro ripartendo sempre dall'ultima cella selezionata del DB, inizia dal "RipetiRicerca" che ho evidenziato in grassetto.

    Grazie ancora per l'aiuto e fatemi sapere se vi occorrono altre informazioni

    Generoso

    _________________

    Sub AVVIA_TROVA_Click()

    Application.ScreenUpdating = False

    A_vecc = Range("V1").Value

    Dim Blocca As Integer

    Blocca = 0

    R = Range(Cells(1, 1), Cells(2, 30))

    On Error Resume Next

    If UserForm3.TROVA.Value = "" Then

    MsgBox "Inserire un riferimento da ricercare.", Buttons:=vbInformation, Title:="ATTENZIONE"

    Exit Sub

    End If

    Z = Range("T1").Value

    If Cells(Range("v1").Value, Range("v2").Value).Interior.Color = 6750207 Then

        Range(Cells(Range("V1").Value, 1), Cells(Range("V1").Value, 20)).Select

        With Selection.Interior

            .Pattern = x1None

        End With

        Cells(Range("v1").Value, Range("v2").Value).Select

        With Selection.Interior

            .Pattern = xlNone

        End With

        ActiveCell.Font.ColorIndex = xlAutomatic

    End If

    Active.Cell

    If ActiveCell.EntireColumn.Hidden = True Then

    Cells(3, 1).Select

    End If

    If ActiveCell.Row = 1 Then

    Cells(3, 1).Select

    End If

    If ActiveCell.Row = 2 Then

    Cells(3, 1).Select

    End If

    With Selection.Interior

    .Pattern = xlNone

    End With

    ActiveCell.Font.ColorIndex = xlAutomatic

    RipetiRicerca:

    If Err = Cells.Find(What:=UserForm3.TROVA.Text, After:=ActiveCell, LookIn:=xlFormulas, _

            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

            MatchCase:=False, SearchFormat:=False).Activate Then

    InterrompiRicerca:

    MsgBox "Nessun riferimento trovato. Cambiare termine da ricercare.", Buttons:=vbInformation, Title:="RISULTATO RICERCA"

    Cells(3, 1).Select

    Exit Sub

    End If

    On Error GoTo 0

    If ActiveCell.EntireColumn.Hidden = True Then

    GoTo RipetiRicerca

    End If

    If ActiveCell.Row = 1 Then

        Blocca = Blocca + 1

        If Blocca = 5 Then

        GoTo InterrompiRicerca

            Else

            GoTo RipetiRicerca

        End If

    End If

    If ActiveCell.Row = 2 Then

    Blocca = Blocca + 1

        If Blocca = 5 Then

        GoTo InterrompiRicerca

            Else

            GoTo RipetiRicerca

        End If

    End If

    ActiveCell.Select

    ActiveWindow.SmallScroll Down:=(ActiveCell.Row - A_vecc)

    ActiveWindow.SmallScroll toleft:=4

        Dim X As Integer, Dato As String, Parola As String, Lung As Integer

        Parola = UserForm3.TROVA.Text

        Lung = Len(UserForm3.TROVA.Text)

        Dato = LCase(ActiveCell)

        ActiveCell.Font.ColorIndex = xlAutomatic

        For X = 1 To Len(Dato)

            If Mid(Dato, X, Lung) = Parola Then

                With ActiveCell.Characters(Start:=X, Length:=Lung).Font

                    .ColorIndex = 3

                    X = X + Lung - 1

                End With

            End If

        Next X

    A = ActiveCell.Row

    B = ActiveCell.Column

    Range("V1") = A

    Range("V2") = B

    Range(Cells(A, 1), Cells(A, 20)).Select

    With Selection.Interior

            .Pattern = xlSolid

            .PatternColorIndex = xlAutomatic

            .ThemeColor = xlThemeColorDark1

            .TintAndShade = -4.99893185216834E-02

            .PatternTintAndShade = 0

    End With

    Cells(A, B).Select

    With Selection.Interior

         .Pattern = xlSolid

         .PatternColorIndex = xlAutomatic

         .Color = 6750207

         .TintAndShade = 0

         .PatternTintAndShade = 0

    End With

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-02-24T12:58:59+00:00

    Ciao Tullio,

    Per evitare la visione di movimenti costanti del cursore, il metodo di scelta sarebbe quello di eliminare le selezioni inutili dal codice. Inoltre, sarebbe possibile limitare la ricerca alle colonne visibili. Infine, secondo la costruzione del codice. è possibile sovrascrivere inavvertitamente l'istruzione Application.ScreenUpdating.

    Tuttavia, per consigliarti meglio, sarebbe opportuno postare il codice problematico.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento