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

Cancellare riga da range.

8 views
Skip to first unread message

Snoopy

unread,
Dec 4, 2009, 10:06:26 AM12/4/09
to
Buon pomeriggio,
vi chiedo la gentilezza di non prendermi per pazzo.
In un foglio di lavoro completamente bloccato ho una tabella A1:B5
(per esempio) che contiene le uniche celle editabili.
selezionando una cella nella colonna A, vorrei cancellare (non
nascondere) tutta la riga.
In sostanza, vorrei, da codice, verificare che la cella selezionata si
trovi nel range detto e solo successivamente procedere con
l'eliminazione.
Come faccio?
Grazie 1000!

Mauro Gamberini

unread,
Dec 4, 2009, 10:29:52 AM12/4/09
to

Se(se) ho capito:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lng As Long
On Error resume Next
If Not Intersect(Range("A1:B5"), Target) Is Nothing Then
lng = Target.Row
Target.Offset(6, 0).Select
Rows(lng).Delete
End If
End Sub

Da copia/incollare nel modulo di codice
del foglio dove vuoi questa cosa.

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/officeit/threads

Snoopy

unread,
Dec 4, 2009, 10:47:58 AM12/4/09
to
Forse non ho capito io!
Ho inserito il codice in un modulo (e già quì ho dei dubbi) ma non
riesco a farlo girare.
Quando vado in esecuzione mi spunta fuori l'elenco macro ma manca
quella in oggetto.
Capisco che mi sono spiegato male!

Dettaglio i passi:
1. seleziono una cella
2. avvio il mio codice che prima verifica se la cella selezionata è
nel range A1:B5 e poi, se la condizione si verifica, elimina la riga
corrispondente alla cella selezionata.
3: se la verifica fallisce, ovvero ho selezionato una cella fuori da
quel range, mi avverte ed esce dalla Sub.

Snoopy

unread,
Dec 4, 2009, 10:56:39 AM12/4/09
to
Mauro, il problema è che io non vorrei una cosa automatica perchè, una
volta cancellata la riga, devo essere nella condizione di poter
selezionare un'altra cella senza che si esegua alcun codice,
preferirei un codice da mettere in un modulo tradizionale.... si può?

Mauro Gamberini

unread,
Dec 4, 2009, 11:07:36 AM12/4/09
to
Leggere(bene), per favore.

<scritto>


Da copia/incollare nel modulo di codice
del foglio dove vuoi questa cosa.

</scritto>


Dettaglio i passi:
1. seleziono una cella

2. avvio il mio codice che prima verifica se la cella selezionata �


nel range A1:B5 e poi, se la condizione si verifica, elimina la riga
corrispondente alla cella selezionata.
3: se la verifica fallisce, ovvero ho selezionato una cella fuori da
quel range, mi avverte ed esce dalla Sub.

**************************************

Ed � esattamente quello che accade.
Se selezioni una cella nel Range A1:B5,
la riga viene eliminata. Se(se) il foglio
� protetto:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lng As Long

On Error Resume Next


If Not Intersect(Range("A1:B5"), Target) Is Nothing Then
lng = Target.Row
Target.Offset(6, 0).Select

Me.Unprotect Password:="tuaPassword"
Rows(lng).Delete
Me.Protect Password:="tuaPassword"
End If
End Sub

Snoopy

unread,
Dec 4, 2009, 11:15:37 AM12/4/09
to
No no! Il tuo codice funziona benissimo ma il mio problema è diverso.
Vorrei che l'esecuzione della macro sia comandata da me... attraverto
un bottone.

Mauro Gamberini

unread,
Dec 5, 2009, 10:24:21 AM12/5/09
to
No no! Il tuo codice funziona benissimo ma il mio problema � diverso.

Vorrei che l'esecuzione della macro sia comandata da me... attraverto
un bottone.
******************************

Macro da agganciare al tuo pulsante/bottone,
da copia/incollare in un modulo standard:

Public Sub mEliminaRiga()

'dichiaro le variabili
Dim lng As Long
Dim sh As Worksheet

'metto un riferimento al foglio attivo
Set sh = ActiveSheet

With sh
'se la cella attiva � nel Range
'A1:B5
If Not Intersect(.Range("A1:B5"), _
ActiveCell) Is Nothing Then
'recupero il numero di riga della
'cella attiva
lng = ActiveCell.Row
'elimino l'eventuale protezione
'del foglio
.Unprotect Password:="tuaPassword"
'elimino la riga
.Rows(lng).Delete
'rimetto la protezione al foglio


.Protect Password:="tuaPassword"
End If

End With

'Set a Nothing della variabile oggetto
Set sh = Nothing

End Sub


Occhio per�!
Questa macro � *astratta*, cio� funziona
su qualsiasi foglio sia attivo se lanciata.
Perch� miri solo ad un determinato foglio,
esempio il Foglio1, dobbiamo specificarlo:

Public Sub mEliminaRiga()

'dichiaro le variabili
Dim lng As Long
Dim sh As Worksheet

Set sh = ActiveSheet

With sh
'se il foglio attivo � il
'Foglio1
If .Name = "Foglio1" Then
'se la cella attiva � nel Range
'A1:B5 del Foglio1
If Not Intersect(.Range("A1:B5"), _
ActiveCell) Is Nothing Then
'recupero il numero di riga della
'cella attiva
lng = ActiveCell.Row
'elimino l'eventuale protezione
'del foglio
.Unprotect Password:="tuaPassword"
'elimino la riga
.Rows(lng).Delete
'rimetto la protezione al foglio


.Protect Password:="tuaPassword"
End If

End If
End With

'Set a Nothing delle variabili oggetto
Set sh = Nothing

Snoopy

unread,
Dec 5, 2009, 4:30:23 PM12/5/09
to
Ciao Mauro,
sono veramente imbarazzato! Non pretendevo che mi rispondessi
addirittura di sabato!!!
Sei stato molto gentile.
In effetti questa macro deve lavorare solo con alcuni dei fogli di cui
è composto il mio file e la soluzione per riconoscerli era proprio
quella che puntualmente hai suggetito.
E comunque, anteporrò un primo msgbox per chiedere la conferma
dell'eliminazione e successivamente una nuova conferma.
Ti auguro buon week end (lungo!?!?!?).

Mauro Gamberini

unread,
Dec 7, 2009, 9:03:09 AM12/7/09
to
sono veramente imbarazzato! Non pretendevo che mi rispondessi
addirittura di sabato!!!
*******************************************

Il mio Shabbat � mobile... ;-)

E grazie per il gentile riscontro.

0 new messages