Macro in excel-modifica comando range



  • Macro in excel-modifica comando range
    di Gianni1966 data: 09/02/2011

    Ciao, ho provato a creare una macro in excel con la registrazione in automatico ma alcuni comandi sicuramente non sono corretti. lo scopo è copiare dei dati da un file in un'altro utilizzando la macro. nella regiastrazione ho usato i comandi in excel end freccia in alto feccia a destra e freccia a sinistra, però se nella macro mi scrive "range("g128:k128").select" al posto del comando maiuscolo,freccia a destra 4 volte. cosi ogni volta che lancerò la macro andrà sempre a prendere le celle g128:k128 mentre il range cambia a secondo del risultato dei comandi precedenti. praticamente qual è il codice vba che sostituisce il comando in excel maiuscolo/freccia a destra 4 volte? spero di essere stato chiaro, vi ringrazio per l'aiuto che potrete darmi. saluti
     
    Application.Goto Reference:="R200C2"
        Selection.End(xlUp).Select
        Selection.Offset(1, 0).Select
        ChDir "K:CLCGSRendimenti"
        Workbooks.Open Filename:= _
            "K:CLCGSRendimentiSTORICO RENDIMENTI FIDEURAM VITA.xls"
        Application.Goto Reference:="R2000C7"
        Selection.End(xlUp).Select
        Selection.End(xlUp).Select
        Selection.Offset(1, 0).Select
        Range("G128:K128").Select
        Selection.Copy
        Windows("2011-01-31 Storico Rendimenti Fideuram Vita.xls").Activate
        ActiveSheet.Paste
        Windows("STORICO RENDIMENTI FIDEURAM VITA.xls").Activate
        Application.CutCopyMode = False
        ActiveWindow.Close
    End Sub



  • di Mik (utente non iscritto) data: 09/02/2011

    Ciao gianni

    non ricordo come si estende una selezione in excel...però posso dirti che quello che stai tentando di fare, poui arrivarci diversamente così:
    dal codice che hai postato elimina questa parte:

    selection.end(xlup).select
    selection.end(xlup).select
    selection.offset(1, 0).select
    range("g128:k128").select
    selection.copy

    e sostituisci con queste due righe:



     
    colonna=activecell.colum
    range(cells(1,colonna),cells(1,colonna+3)).copy



  • di Mik (utente non iscritto) data: 09/02/2011

    Si vabbèè sono orbo, non avevo notato l'offset +1 di riga, quindi cambia nella formula precedente mettici 2 al posto di uno per le due celle in range....

    fammi sapere

    ciao


  • Macro in excel-modifica comando range
    di Gianni1966 (utente non iscritto) data: 10/02/2011

    No, non funziona, la macro va in debug su "colonna = activecell.colum", sinceramente non conoscendo i codici vba non capisco perchè in ogni modo grazie per l'aiuto. ciao
     
    Application.Goto Reference:="R200C2"
        Selection.End(xlUp).Select
        Selection.Offset(1, 0).Select
        ChDir "K:CLCGSRendimenti"
        Workbooks.Open Filename:= _
            "K:CLCGSRendimentiSTORICO RENDIMENTI FIDEURAM VITA.xls"
        Application.Goto Reference:="R2000C7"
        colonna = ActiveCell.colum
        Range(Cells(2, colonna), Cells(2, colonna + 3)).Copy
        Selection.Copy
        Windows("2011-01-31 Storico Rendimenti Fideuram Vita.xls").Activate
        ActiveSheet.Paste
        Windows("STORICO RENDIMENTI FIDEURAM VITA.xls").Activate
        Application.CutCopyMode = False
        ActiveWindow.Close
    End Sub



  • di Mik (utente non iscritto) data: 10/02/2011

    Sono io che faccio le ore piccole...
    ho sbagliato a scrivere..... è:
    columns

    comunque non capisco una cosa: seguendo i tasti registrati dal tuo codice è impossibile che restituisca un range alla riga 128!!! come mai a te da quella riga, hai percaso nascosto righe nel foglio?





  • di Mik (utente non iscritto) data: 10/02/2011

    Ggrrrrrr.... dai prova con questa:

    ma non ti da il suggerimento mentre scrivi?
     
    colonna = ActiveCell.column


  • Macro in excel-modifica comando range
    di Gianni1966 (utente non iscritto) data: 10/02/2011

    Meglio ma non il risultato sperato, cerco di spiegarti cosa stò cercando di fare, io ho in un file una tabella dove ogni mese scrivo una riga nuova (il 1 mese scrivo nella riga 1, il secondo nella riga 2, etc) ora io vorrei utilizzare una macro per copiare l'ultima riga compilata su un'altro file per questo mi posiziono sulla cella application.goto reference:="r2000c7" e con end freccia in alto andavo sulla prima cella piena poi inserivo il comando di scendere di una cella trovandomi sulla riga 128 (che cambierà di volta in volta che avrò aggiunto una nuova riga. con il comando che mi hai insegnato la macro mi copia sempre quello che è scritto nella riga 1 e non è quello che volevo. allego il codice con la tua modifica! spero di essermi fatto capire, purtroppo non comprendo bene il comando che mi hai consigliato e non so come modificarlo. ciao

     
    Application.Goto Reference:="R200C2"
        Selection.End(xlUp).Select
        Selection.Offset(1, 0).Select
        ChDir "K:CLCGSRendimenti"
        Workbooks.Open Filename:= _
            "K:CLCGSRendimentiSTORICO RENDIMENTI FIDEURAM VITA.xls"
        Application.Goto Reference:="R2000C7"
        colonna = ActiveCell.Column
        Range(Cells(1, colonna), Cells(1, colonna + 4)).Copy
        Windows("2011-01-31 Storico Rendimenti Fideuram Vita.xls").Activate
        ActiveSheet.Paste
        Windows("STORICO RENDIMENTI FIDEURAM VITA.xls").Activate
        Application.CutCopyMode = False
        ActiveWindow.Close
    End Sub
    



  • di Mik (utente non iscritto) data: 10/02/2011

    Adesso sei stato molto più chiaro...anche se dal codice che avevi postato inizialmente, non fa proprio quello che hai detto di voler fare adesso:
    selection.end(xlup).select
    selection.end(xlup).select
    questi due comandi che si ripetono, non portano il cursore all'ultima riga piena del foglio, ma nella maggiorparte dei casi corrisponde alla prima riga assoluta del foglio...poi l'offset, lo sposta di una riga in basso, ed ecco spiegato il perchè della seconda riga....

    ora, premesso che a te interessa l'ultima riga piena (assoluta), mi confermi che le colonne da copiare siano sempre dalla g alla k ?? oppure possono variare?

    intanto prova con questo.. sostituendo alle due righe del cosice di prima
     
    colonna=activecell.column  ' memorizza la colonna attuale
    cells(rows.count,colonna).select ' va all'utima riga assoluta del foglio
    selection.end(xlup).select ' si posiziona sull'ultima riga piena
    range(cells(selection.row,colonna),cells(selection.row,colonna+3)).copy 'copia includendo le 3 celle a destra a partire dalla cella attiva riga corrente


  • Macro in excel-modifica comando range
    di Gianni1966 (utente non iscritto) data: 11/02/2011

    Perfetto, così va benissimo, grazie mille e soprattutto grazie per la spiegazione dei comandi che è molto utile, sei stato gentilissimo. trovo le macro in excel molto utili però il registratore in automatico di excel non è sufficiente se si cerca di fare qualcosa di più complesso, terrò a memoria i comandi che mi hai insegnato e cercherò ogni tanto di consultare il forum dove vedo che c'è molto da imparare. ciao



  • di Mik (utente non iscritto) data: 11/02/2011

    Prego

    si certo la registrazione macro per apprendere non è tutto...ma la guida in linea può fare tanto (tranne quella dal 2007 ad oggi che trovo peggiorata, quella del 2003 è ottima, secondo me, per imparare a conoscere ed apprendere i vari comandi..

    ciao e in bocca al lupo