Domanda.

nome=Luisa
cognome=Amodio
versione=2000
conosco2=medio
vba=SI
macro=SI
email=Lamodio@sopragroup.it
chra=213
problema=Ciao Ennius! Scusa se ti contatto ma mi trovo di fronte a un problema e non riesco a venirne a capo!! Spiego: su foglio Excel visualizzo una lista di records che prendo da una tabella Access.
Il foglio mi serve solo come display, l'utente si interfaccia con forms per inserire e modificare dati. Se però vuole eliminare uno o più records, permetto di selezionarli e dopo conferma li elimino fisicamente. Il problema sta nella selezione multipla, non riesco a trovare i comandi vba per decodificare i records selezionati!
Ho provato con 'Selection.Areas.Count' ma questo mi ritorna solo il numero delle aree selezionate...cone faccio a capire per ciascuna area quali records ha scelto l'utente?? spero di essermi spiegata e spero tu possa darmi una mano!
Grazie, e buon lavoro! Luisa.
 

Risposta.

ciao Luisa, mancano due precisazioni: dici che l'utente usa un form per interreagire con i dati, ma quali dati? Immagino tu ti riferisca ai dati presenti importati sul foglio di lavoro, non quelli presenti nella tabella del database di provenienza, giusto? Poi da ciò che scrivi, a te interessa sapere come identificare le righe eventualmente selezionate, giusto? Intanto in Excel non esisono records, ma righe, e le colonne sono i campi.
Dando quindi per scontato che le righe da cancellare siano già selezionate tramite la procedura scelta dall'utente, per identificare il numero di riga o delle righe puoi accodare queste istruzioni:
1) per cancellare una sola riga:
ActiveCell.Rows.EntireRow.Delete
Con ActiveCell si identifica la cella in quel momento selezionata, con Rows si identifica il numero riga relativo alla cella, il resto è comprensibile.
2) per cancellare più righe di una selezione (possono anche essere righe non contigue purchè selezionate):
With Selection
.Rows.EntireRow.Delete
End With

questa istruzione cancella tutte le righe di una selezione, anche se la selezione è stata fatta sulle celle di una sola colonna, per esempio: da D4 a D8 selezionate, verranno cancellate le righe (non solo le celle) intere dalla 4 alla 8.
Se invece non è questo che vuoi, spiegati meglio.
ciao, fammi sapere, ennius
 

Risposta di Luisa.

Ciao!
Scusa se non mi sono espressa bene, comunque, nel frattempo sono riuscita a trovare una soluzione, grazie anche al fatidico Help on line di VBA che se riesci a usare...è fantastico!!
Alla fine quello che cercavo era questo:

Dim rangeToUse, singlearea
Set rangeToUse = Selection
If rangeToUse.Areas.Count = 1 Then
Elimina (Selection.Item(1, 1))
Else
For Each singlearea In rangeToUse.Areas
Elimina (singlearea.Item(1, 1))
Next
End If


Ci devo lavorare ancora un pò su per controllare esattamente la selection (nella Elimina testo se la riga, non il record, è effettivamente valido), però l'inizio è ottimo!
Adesso provo i tuoi suggerimenti, ti ringrazio per il tempo che mi hai dedicato..faccio affidamento su di te per il prossimo 'black hole' che mi si presenterà!

Luisa.