PDA

View Full Version : [VBA EXCEL] Selezione dinamica da codice


nelsonblu
28-05-2009, 14:29
4 Colonne senza intestazione sono il risultato di una sub alquanto complessa.
Io seleziono manualmente un numero n di righe di queste 4 colonne e faccio partire una seconda sub routine che mi fa ottenere ciò che voglio.

http://digilander.libero.it/nelsonblu1/dummy.jpg

I record di queste colonne variano ogni volta che rieseguo la prima sub.
La selezione manuale è assai semplice, in pratica i primi n record caratterizzati dall'avere le celle tutte diversa da "" come da figura.

Se riuscissi a selezionare tramite codice i primi n record tutti diversi da null potrei unire le due sub con un notevole vantaggio se si considera che la richiesta di selezione manuale avviene circa ogni 10 minuti e le elaborazioni complete possono durare 10-12 ore.

MarcoGG
28-05-2009, 15:28
Se riuscissi a selezionare tramite codice i primi n record tutti diversi da null potrei unire le due sub con un notevole vantaggio
...


Dim rigaInizio As Long
rigaInizio = 1
Dim limiteRigaMax As Long
limiteRigaMax = 100
Dim colonnaInizio As String
colonnaInizio = "A"
Dim colonnaFine As String
colonnaFine = "D"

Dim rangeDaCopiare As String
Dim R As Range
Dim riga As String
Dim indiceUltimaCella As Long
indiceCellaVuota = 0
Dim i As Long
For i = rigaInizio To limiteRigaMax
riga = colonnaInizio & i & ":" & colonnaFine & i
For Each R In Range(riga)
If R.Text = "" Then
indiceUltimaCella = i - 1
Exit For
End If
Next R
If indiceUltimaCella > 0 Then Exit For
Next i

rangeDaCopiare = colonnaInizio & rigaInizio & ":" & colonnaFine & indiceUltimaCella

'Msg di debug...
MsgBox rangeDaCopiare

Prova... ;)

nelsonblu
28-05-2009, 23:12
Acciderbolina, funziona!!!!
Ma chi sei? Mandrake!!!!

Nel mio caso specifico mi serviva alla fine un
Range(rangeDaCopiare).Select
al posto del Msg

grazie ancora

MarcoGG
29-05-2009, 08:23
Acciderbolina, funziona!!!!
Ma chi sei? Mandrake!!!!

Nel mio caso specifico mi serviva alla fine un
Range(rangeDaCopiare).Select
al posto del Msg

grazie ancora

Perchè mai non avrebbe dovuto funzionare ? :D
Sì, mi sono fermato alla stringa del range di riferimento, dato che non sapevo quale metodo avresti usato per la selezione/copia del range interessato.
In ogni caso il copia/incolla di un range non necessita affatto del trenino di istruzioni .Select / .Copy / .Select / .Paste, così come esce dal registratore Macro.
Si può fare in modo più conciso e veloce, ad esempio :

Sheets("Foglio1").Range("A1:D10").Copy
Sheets("Foglio2").Range("A1").PasteSpecial

;)