FUNCTION copia cella foglio precedente



  • FUNCTION copia cella foglio precedente
    di Cristian (utente non iscritto) data: 29/01/2015 06:24:15

    Buongiorno, ho la necessità di realizzare una macro che mi copi il valore del foglio che lo precede nella cella attiva.
    In pratica vorrei riprodurre il comando =Foglio1!A1 mah il foglio deve essere variabile cioè se sono nel foglio 10 mi deve copiare dal 9, e la cella che voglio copiare quella che indico.

    Esempio. (la function creata la chiameremo Copy) In C5 del foglio 10 scrivendo =Copy(C1), la function mi copia in C5 del foglio 10 il valore o formula della cella C1 del foglio 9

    È realizzabile una function cosi? Grazie



  • di lepat (utente non iscritto) data: 29/01/2015 07:32:51

    prova questa, ricordati che non puoi chiamarla copy o con altro nome già impegnato dal vba
     
    Function shprev()
      shprev = Sheets(ActiveSheet.Index - 1).Range("C1").Value
    End Function



  • di Cristian (utente non iscritto) data: 29/01/2015 08:12:33

    Potrebbe andare mah, C1 però non deve essere un dato fisso. Perché questa funtion verrà usata più volte in più celle in tutti i fogli del progetto tranne il primo.
    Il valore devo assegarlo io in base alla cella dove scrivo la function



  • di Cristian (utente non iscritto) data: 29/01/2015 09:16:37

    Ho modificato cosi mah non funziona
     
    Function shprev(selectstring as string)
      shprev = Sheets(ActiveSheet.Index - 1).replace(selectstring, "").Value
    End Function



  • di lepat (utente non iscritto) data: 29/01/2015 09:29:31

    prova ora
     
    Function shprev()
      adr = ActiveCell.Address
      shprev = Sheets(ActiveSheet.Index - 1).Range(adr).Value
    End Function
    



  • di Cristian (utente non iscritto) data: 29/01/2015 09:37:53

    Ci siamo quasi! Ora copia la medesima cella del foglio precedente nel foglio attivo. Ma io ho la necessità di dirgli quale cella del foglio precedente deve copiare.



  • di lepat (utente non iscritto) data: 29/01/2015 09:39:27

    devi deciderti a spiegare meglio il tuo obiettivo, magari allegando un file di esempio



  • di Cristian (utente non iscritto) data: 29/01/2015 09:45:53

    Scusami Lepat, pensavo di averlo scritto nel primo post, deve funzionare come la formula =foglio1!A1 MA A1 è variabile e deciderò di volta in volta in riferimento in base alla cella in cui lo lancio



  • di scossa (utente non iscritto) data: 29/01/2015 10:23:57

    Vedi UDF sottostante.

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Function shprev(ByVal rCella As Range)
      'by scossa
      Dim nIdx As Long
      nIdx = rCella.Parent.Index
      If nIdx > 1 Then
        shprev = ThisWorkbook.Worksheets(rCella.Parent.Index - 1).Range(rCella.Address)
      Else
        shprev = CVErr(2001)
      End If
    End Function



  • di scossa (utente non iscritto) data: 29/01/2015 10:25:34

    errata-corrige

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Function shprev(ByVal rCella As Range)
      'by scossa
      Dim nIdx As Long
      nIdx = rCella.Parent.Index
      If nIdx > 1 Then
        shprev = ThisWorkbook.Worksheets(nIdx - 1).Range(rCella.Address)
      Else
        shprev = CVErr(2001)
      End If
    End Function 
    



  • di Cristian (utente non iscritto) data: 29/01/2015 10:39:26

    Grazie Scossa per lanciarlo devo scrivere nella cella =shprev(A1) giusto?



  • di scossa data: 29/01/2015 10:43:52

    Sì, ma A1 non è "fisso", può essere qualsiasi altra cella, p.e. =shprev(F30).



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Cristian (utente non iscritto) data: 29/01/2015 10:46:39

    Esattamente!!! Proprio ciò che mi serviva. Appena riesco la testo

    Per il momento grazie



  • di Cristian (utente non iscritto) data: 29/01/2015 11:06:54

    Mi restituisce sempre #VALORE!




  • di scossa data: 29/01/2015 11:16:26

    cit. Cristian: "Mi restituisce sempre #VALORE!"

    Non è che la stai inserendo in una cella del primo foglio?
    Perché listruzione nell'Else serve appunto per restituire un errore se inserita nel primo foglio, in quanto il foglio precedente al primo non esiste.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Cristian (utente non iscritto) data: 29/01/2015 11:22:42

    No, ho provato sia sul secondo che terzo foglio e da sempre errore



  • di Cristian (utente non iscritto) data: 29/01/2015 11:35:09

    Allego file



  • di scossa data: 29/01/2015 12:05:52

    Scusa ma tu dove l'hai trovata questa istruzione:

    If nIdx = rCella > 1 Then

    Copia e incolla la sub che ho scritto io!


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Function shprev(ByVal rCella As Range)
      'by scossa
      Dim nIdx As Long
      nIdx = rCella.Parent.Index
      If nIdx > 1 Then
        shprev = ThisWorkbook.Worksheets(nIdx - 1).Range(rCella.Address)
      Else
        shprev = CVErr(2001)
      End If
    End Function



  • di Cristian (utente non iscritto) data: 29/01/2015 12:24:34

    Cheffffffffiguradimmmmm

    Grazie Scossa e scusa