Sostanzialmente io non capisco perchè di debbano scrivere delle FUNZIONI(se così si possono chiamare) così insulse per ottenere un risultato necessario...!
Il termine insulso è riferito al fatto che non hanno nulla di TECNICO, non sono Debuggabili e, come ben puoi vedere ti rendono la vita difficile per NULLA.
Il suggerimento di GIBRA era quello giusto perchè non lo hai colto...?
Ha il massimo della semplicità di valutazione, scrivi la tua bella Query in QBE la testi e vedi che risultato restituisce, apri un Recordset recuperi il dato e fai in modo possa essere richiamabile...!
Function NuovaFattura()
' 0001/15
Dim strSQL As String
Dim intPRG As Integer
Dim intY As Integer
Dim rs As DAO.Recordset
strSQL = "SELECT Max(Left$([Fattura],4)) AS Progressivo FROM TX "
strSQL = strSQL & "GROUP BY Val(Right$([Fattura],2)) "
strSQL = strSQL & "HAVING (((Val(Right$([Fattura],2)))=Val(Format$(Now(),'yy'))));"
Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbopendinaset, dbReadOnly)
If rs.EOF Then ' Anno NUOVO ripartiamo da 1...!
progressivo = 1
Else
progressivo = rs.Fields("Progressivo") + 1
End If
NuovaFattura = Format$(progressivo, "0000") & "/" & Format$(Now(), "YY")
End Function
Questa funzione la puoi richiamare come DEFAULT VALUE di un controllo o come UDF in una Query...
Vedi tu ora di gestirla al meglio se ti va...