|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2005
Messaggi: 5
|
[VBA EXCEL] Selezione dinamica da codice
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. ![]() 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. Ultima modifica di nelsonblu : 28-05-2009 alle 14:33. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
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 ![]() |
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Nov 2005
Messaggi: 5
|
Acciderbolina, funziona!!!!
Ma chi sei? Mandrake!!!! Nel mio caso specifico mi serviva alla fine un Range(rangeDaCopiare).Select al posto del Msg grazie ancora |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() 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 : Codice:
Sheets("Foglio1").Range("A1:D10").Copy Sheets("Foglio2").Range("A1").PasteSpecial ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:51.