Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

aggiornamento cella da VBA stranamento lentissimo

27 views
Skip to first unread message

Ammammata

unread,
May 11, 2022, 11:30:36 AM5/11/22
to
ho scritto qualche riga di codice che legge il valore di una colonna,
controlla il corrispondente in un'altra colonna e se non è quello che ci si
aspetta lo aggiorna col valore giusto

If Change = True Then Cells(Row, ManufacturerCol).Value = Manufacturer

questa istruzione impiega un sacco di tempo, con sacco uguale a pochi
decimi di secondo, che moltiplicati per 11000 righe diventano un SACCO vero

c'è un metodo alternativo a Cells(Row, ManufacturerCol).Value che sia più
performante?

non è un grosso problema in quanto la routine, che senza l'istruzione di
aggiornamento elabora 11000 righe in meno di due secondi, la posso far
girare di notte e fgvpnmmv, ma la curiosità resta

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

casanmaner

unread,
May 11, 2022, 11:58:32 AM5/11/22
to
Il giorno mercoledì 11 maggio 2022 alle 17:30:36 UTC+2 Ammammata ha scritto:
> ho scritto qualche riga di codice che legge il valore di una colonna,
> controlla il corrispondente in un'altra colonna e se non è quello che ci si
> aspetta lo aggiorna col valore giusto
>
> If Change = True Then Cells(Row, ManufacturerCol).Value = Manufacturer
>
> questa istruzione impiega un sacco di tempo, con sacco uguale a pochi
> decimi di secondo, che moltiplicati per 11000 righe diventano un SACCO vero
>
> c'è un metodo alternativo a Cells(Row, ManufacturerCol).Value che sia più
> performante?
>
> non è un grosso problema in quanto la routine, che senza l'istruzione di
> aggiornamento elabora 11000 righe in meno di due secondi, la posso far
> girare di notte e fgvpnmmv, ma la curiosità resta
>
Hai provato a disabilitare il calcolo automatico, l'aggiornamento dello schermo e gli eventi prima di eseguire la procedura (per poi riabilitare alla fine)?

Ammammata

unread,
May 12, 2022, 4:08:46 AM5/12/22
to
On Wednesday 11/05/2022 casanmaner wrote:
> Hai provato a disabilitare il calcolo automatico, l'aggiornamento dello
> schermo e gli eventi prima di eseguire la procedura (per poi riabilitare alla
> fine)?

no, mi è venuto in mente ma non lo ho fatto, anche perché, prima di
aggiungere le righe per l'aggiornamento del valore, la routine si
limitava a colorare lo sfondo delle celle sbagliate, e anche con tutto
quanto attivo (aggiornamenti, calcolo, etc) impiegava appunto solo un
paio di secondi scarsi

farò comunque la prova


questo è il codice

Public Sub CheckSerialNo()

Dim Row, NumRows As Integer
Dim Serial, SerialID, Manufacturer As String
Dim Valid, Change As Boolean

Dim SerialNumberCol As Integer
SerialNumberCol = 11 ' column
Dim ManufacturerCol As Integer
ManufacturerCol = 7
Dim BackColor, NoBackColor As Integer
BackColor = 8 ' azzurrino ' era 6 ' yellow
NoBackColor = 2 ' bianco

ActiveSheet.Select

' start row
Row = 3

' loop
While Cells(Row, 1).Value <> ""

' read Serial & Manufacturer
Serial = UCase(Cells(Row, SerialNumberCol).Value)
Manufacturer = Cells(Row, ManufacturerCol).Value

Valid = False
Change = False

' format cells without backcolor
Cells(Row, ManufacturerCol).Interior.ColorIndex = NoBackColor
Cells(Row, SerialNumberCol).Interior.ColorIndex = NoBackColor

' test GINO
SerialID = Left(Serial, 5)
If SerialID = "MAR-N" And Manufacturer = "GINO" Then Valid = True:
GoTo ExitTest
If SerialID = "MAR-N" Then Manufacturer = "GINO": Change = True:
GoTo ExitTest

' test CARLO
SerialID = Left(Serial, 5)
If SerialID = "MAT-N" And Left(Manufacturer, 5) = "CARLO" Then
Valid = True: GoTo ExitTest
If SerialID = "MAT-N" Then Manufacturer = "CARLO": Change = True:
GoTo ExitTest

' altri test che non riporto

ExitTest:
If Valid = True Then GoTo NextRow

If Change = True Then Cells(Row, ManufacturerCol).Value =
Manufacturer: GoTo NextRow

' format cells with backcolor
Cells(Row, ManufacturerCol).Interior.ColorIndex = BackColor
Cells(Row, SerialNumberCol).Interior.ColorIndex = BackColor

NextRow:
' increase row
Row = Row + 1

' end loop
Wend

End Sub

by....@gmail.com

unread,
Jun 27, 2022, 3:15:02 AM6/27/22
to
Ciao potrebbero esseri altri metodi, ma senza un file d'esempio, mi è difficile consigliare, se hai la possibilità di mettere un esempio con il risultato voluto, vedo cosa si può fare.

Ciao By Sal 88-D
0 new messages