FUNCTION copia cella foglio precedente
Hai un problema con Excel? 
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
Vuoi Approfondire?