› Sviluppare funzionalita su Microsoft Office con VBA › Incremento del numero dell'anno in una data
-
AutoreArticoli
-
Ciao a tutti.
nell'esempio che allego voglio incrementare la data delle celle che corrispondono ad un determinato anno, aumentandone l'anno in una unità. Ad esempio l'anno 2024 cambiarlo in 2025.
Ho però un errore "necessario oggetto".
Quale è il problema?
Grazie
Allegati:
You must be logged in to view attached files.Ciao, prova così:
Option Explicit Sub IncrementaAnno() Dim anno As Variant, nuovaData As Date Dim cella As Range Dim ur As Long Dim edit As Boolean anno = Application.InputBox("QUALE ANNO VUOI INCREMENTARE?", "Incrementa anno", Type:=1) If anno <> False Then ur = Sheets("SPESE RICORRENTI").Cells(Rows.Count, "A").End(xlUp).Row For Each cella In Sheets("SPESE RICORRENTI").Range("A2:A" & ur) If Year(cella) = anno Then nuovaData = DateSerial(anno + 1, Month(cella), Day(cella)) cella.Value = nuovaData edit = True End If Next cella If edit Then MsgBox ("OPERAZIONE ULTIMATA"), vbInformation Else MsgBox "Non ci sono date da poter incrementare l'anno", vbExclamation End If End If End SubP.S. per le prossime volte pubblica anche il codice perché chi vuole aiutarti e legge da smartphone non può aprire il file e leggere il codice.
Grazie Alex. Funziona bene. E grazie anche per la dritta di pubblicare anche in codice. Lo farò le prossime volte.
Ciao
Ho però un errore "necessario oggetto".
Quale è il problema?
Io invece vorrei rispondere alla domanda, per quanto sia superfluo dal momento che Alex ha gia' fornito la soluzione al problema. La soluzione data risolve, ma perche'?
Perche' non puoi assegnare un valore alla funzione Year, la quale restituisce un valore.
Nel tuo codice originale l'istruzione:
If Year(cella) = anno Then Year(cella) = anno + 1produce l'errore che hai riportato e che ti dice che non e' consentito assegnare un valore all'oggetto (la funzione Year non e' un'istruzione di assegnazione).
In generale le funzioni come questa restituiscono un valore (pensiamo anche a Left$, Right$, InStr) ma non e' possibile assegnarglielo. Un'eccezione la offre Mid$, che agisce sia come funzione che come istruzione:
- Mid$("pippo", 2, 1) ----> "i" (restituisce il secondo carattere di "pippo")
- a$="pippo" : Mid$(a$, 2, 1) = "x" ----> a$ = "pxppo" (imposta il secondo carattere di a$, che vale "pippo", a "x") -
AutoreArticoli
