Condividi:        

Elimina riga sotto condizioni - Problema Macro VBA 2003

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Elimina riga sotto condizioni - Problema Macro VBA 2003

Postdi Omocaig » 31/08/15 10:42

Ciao, ho un problema:
http://www.filedropper.com/esempio6

Il file allegato ha un solo modulo con la seguente macro:

Codice: Seleziona tutto
Sub Elimina_Se_Non_è_GV()
Dim I As Integer
Dim Righe As String
Sheets("Foglio1").Select
Righe = ActiveSheet.Range("G14").CurrentRegion.Rows.Count
For I = Righe To 14 Step -1
Cells(I, 7).Select
If Selection.Value <> "GV" Or IsNumeric(Selection.Value) Then Selection.EntireRow.Delete
Next I
End Sub


Questa controlla la colonna 7 partendo dalla riga 14 ed elimina tutte le righe in cui non è presente GV. Il problema è che l'istruzione
Codice: Seleziona tutto
Righe = ActiveSheet.Range("G14").CurrentRegion.Rows.Count
sembra fermarsi undici righe prima del del dovuto, difatti il lavoro non viene completato e rimangono le ultime 11 righe non cancellate, perchè ?
Saluti a tutti !
Xp + Office 2016 Ita
Omocaig
Utente Junior
 
Post: 93
Iscritto il: 11/05/15 15:08

Sponsor
 

Re: Elimina riga sotto condizioni - Problema Macro VBA 2003

Postdi wallace&gromit » 31/08/15 13:59

il problema nasce da una gestione ibrida dei riferimenti relativi e assoluti:
quando conti le righe occupate a partire da G14 stai lavorando con dati relativi a quel punto di partenza, mentre poi usi un riferimento assoluto nell'istruzione Cells(), quindi "perdi" le 13 righe sopra a G14.

Per mantenere tutti i riferimenti relativi propongo di usare offset(), così:
Codice: Seleziona tutto
Sub Elimina_Se_Non_è_GV()
Dim I As Integer
Dim Righe As String
Sheets("Foglio1").Select
Righe = ActiveSheet.Range("G14").CurrentRegion.Rows.Count
For I = Righe To 0 Step -1
Range("G14").Offset(I, 0).Select
If Selection.Value <> "GV" Or IsNumeric(Selection.Value) Then Selection.EntireRow.Delete
Next I
End Sub
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Elimina riga sotto condizioni - Problema Macro VBA 2003

Postdi Omocaig » 01/09/15 10:13

Ciao, ti ringrazio ! Ho capito poco del perchè succeda tutto questo e ho paura di farti capire cos'ho capito perchè poi capisci che non ho proprio capito nulla. Comunque, per il futuro, quando uso cell() ho un riferimento assoluto, mentre .Range("G14") è un riferimento relativo in se, oppure è relativo dato che l'ho attribuito ad una variabile ?


mentre poi usi un riferimento assoluto nell'istruzione Cells(), quindi "perdi" le 13 righe sopra a G14.

Quindi perdo le 13 righe perchè le istruzioni a cui ho dato un riferimento relativo ed uno assoluto vanno in conflitto e quindi ho un valore relativo che si basa un un riferimento assoluto che invece la funzione offset risolve, giusto ?

Grazie mille ! Ciao !
Xp + Office 2016 Ita
Omocaig
Utente Junior
 
Post: 93
Iscritto il: 11/05/15 15:08

Re: Elimina riga sotto condizioni - Problema Macro VBA 2003

Postdi wallace&gromit » 01/09/15 10:34

capisco, capisco... mah?
Allora: Cells() e Range("G14") sono entrambi riferimenti assoluti.
Quando conti le righe però parti dal Range("G14") e conti le celle occupate. In quel momento stai facendo una valutazione relativa a quel punto di partenza e non all'intero foglio: se hai contato 3 numeri e usi quel valore in un riferimento assoluto ti troverai in riga 3 e non 16 come vorresti.
Con Offset() invece parti dallo stesso punto di riferimento in cui hai fatto la conta e scendi dei passi richiesti, quindi rientri nella logica del sistema relativo al tuo punto di partenza G14.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Elimina riga sotto condizioni - Problema Macro VBA 2003

Postdi Omocaig » 01/09/15 10:57

Fantastico, grazie !!!
Xp + Office 2016 Ita
Omocaig
Utente Junior
 
Post: 93
Iscritto il: 11/05/15 15:08


Torna a Applicazioni Office Windows


Topic correlati a "Elimina riga sotto condizioni - Problema Macro VBA 2003":


Chi c’è in linea

Visitano il forum: Nessuno e 38 ospiti