Selezione estesa



  • Selezione estesa
    di albiter (utente non iscritto) data: 14/12/2012 23:14:56

    Salve a tutti
    in una macro di un file excel avrei bisogno di aggiungere un'istruzione che,data una cella selezionata,mi estenda la selezione a n/celle attigue della stessa riga affinchè poi io possa copiare l'intera selezione in un altro foglio
    Grazie per l'aiuto!



  • di Vecchio Frac data: 15/12/2012 09:04:34

    Hai provato a usare un registratore di macro esaminando poi il risultato?
    Ti anticipo inoltre che non ti serve nemmeno preselezionare un range perchè il comando Copy non lo richiede. Anzi, Copy accetta pure un parametro Destination con il quale puoi fare di tutto :)




  • Selezione estesa
    di albiter (utente non iscritto) data: 15/12/2012 11:53:09

    grazie,ho provato con il registratore di macro,se evidenzio le celle l'istruzione risulta (faccio un esempio) :
    Range("A3:I3").Select
    mentre io avrei bisogno di un riferimento generico altrimenti la macro mi riporta sempre sulle stesse celle



  • di Vecchio Frac data: 15/12/2012 13:41:41

    "Esaminare il risultato" significa imparare come viene costruito il comando e replicarlo in funzione delle proprie esigenze...
    Hai imparato che:
    - un intervallo di celle si definisce con l'oggetto Range e si specifica tra parentesi e virgolette il riferimento in stile A1;
    - Select serve a selezionare un intervallo.

    Aggiungo che:
    - un intervallo di celle si può specificare combinando oggetti di tipo Range
    - la cella Attiva (che si chiama ActiveCell) è un oggetto di tipo Range

    Quindi:
    - se selezioni una cella (che diventa quella attiva), ad esempio A3, e poi avvii la macro, questo codice:
    range(activecell, "I3").Select
    selezionerà tutto l'intervallo compreso tra A3 e I3.
    Una volta impostata la selezione ci fai quel che vuoi.







  • di albiter (utente non iscritto) data: 16/12/2012 20:44:35

    grazie,faccio tesoro dei suggerimenti,purtroppo non ho grande dimestichezza con il linguaggio vba e cerco di ragionare con logica,ho compreso l'esempio riportato però se io selezionassi,dopo l'esempio di A3,la cella A1,la macro con l'istruzione:

    range(activecell,"I3").Select

    sarebbe incorretta perchè selezionerebbe un'area compresa tra A1 e I3,a me occorrerebbe che da una qualsiasi cella selezionata in colonna A la macro mi selezionasse le adiacenti n-celle nella stessa riga,esempio:
    se seleziono la sola cella A1 la macro mi selezioni anche le celle: B1,C1,D1,E1,..a seguire a piacere
    se seleziono la sola cella A4 la macro mi selezioni anche le celle: B4,C4,D4,E4,..a seguire a piacere



  • di Vecchio Frac data: 16/12/2012 20:57:52

    Premetto che purtroppo la logica ti aiuta poco... ti serve necessariamente conoscere il linguaggio e quali oggetti mette a disposizione Excel, dopodichè la sintassi segue una sua propria logica :)
    Probabilmente già sai che Alt-F11 attiva l'editor di codice.
    Ctrl-G apre la finestra "Immediata" che è fondamentale per fare esperimenti al volo anche in fase di debug passo-passo del codice. In Immediata puoi aiutarti anche premendo F1 dopo aver scritto una parola chiave per ottenere dalla Guida alcune basilari informazioni.

    Perchè la premessa? perchè sto per dirti che una cella in Excel è un oggetto che può essere identificato mediante Range oppure mediante l'oggetto Cells: con Range puoi specificare la cella in formato A1, con Cells usi la notazione numero riga-numero colonna (quindi stile R1C1), ad esempio: Cells(1,1) equivale a A1; Cells(3,8) equivale a H3.
    Inoltre puoi conoscere la riga e la colonna di un range (una cella) con le sue proprietà .Row e .Column (immagina quale risultato ti restituiscono, rispettivamente ^_^).

    Il codice seguente:
    range(activecell, cells(activecell.row, activecell.column + 16))

    seleziona un insieme adiacente e continuo di celle a partire dalla cella attiva fino alla sedicesima cella alla sua destra, compresa, restando sulla stessa riga.







  • di albiter (utente non iscritto) data: 17/12/2012 22:42:45

    grazie mille,ora ho risolto...e approfondito un briciolo la materia.
    Alla prossima