27/09/2023 - Eolo ha scritto:
Buona sera a tutti, su una maschera ho aggiunto la funzione =Conteggio ([CodiceProdotto])+1, per avere sempre un numero nuovo progressivo come codice articolo, ogni volta che ne salvo uno.
Senti una cosa, siccome devo lasciare un attimo, ti lascio ciò che devi fare, è molto semplice:
- Nel VBA se non hai già un Modulo allora ne crei uno
- Nel Modulo inserisci questa funzione (fai il copia e incolla)
- Nella Form sostituisci =Conteggio ([CodiceProdotto])+1 con = MyGetFirstFreeCode('tuaTabella'; 'CodiceProdotto')
- Sostituisci ‘tuaTabella’ con il nome effettivo della Tabella che hai nel tuo Db
Fatto... non devi fare altro e avrai sempre con certezza il primo codice libero
Questa è una possibile soluzione che di gran lunga sostituisce assai meglio il Conteggio che avevi realizzato
Nel Modulo VBA inserisci la funzione, basta che fai un copia incolla, non la devi modificare in quanto è parametrizzata :
Option Compare Database
Option Explicit
_________________________________________________________________________________________________________________
' GET FIRST FREE CODE
Public Function MyGetFirstFreeCode(strYourTableName As String, strYourColumnName As String) As Variant
' retrieve last code
MyGetFirstFreeCode = DBEngine(0)(0).OpenRecordset("SELECT MAX(" & strYourColumnName & ") AS MaxCode FROM " & _
strYourTableName & ";", dbReadOnly).Fields(0).Value
' set retun first free code
If IsNull(MyGetFirstFreeCode) Then MyGetFirstFreeCode = 1 Else MyGetFirstFreeCode = MyGetFirstFreeCode + 1
End Function
Quindi ogni volta che richiamerai questa funzione, passando il parametro nome della tabella e nome della colonna dove eseguire il calcolo, ti restituirà sempre, nel tuo caso, il primo “codice articolo” libero.
N.B.
Come ti avevo già anticipato, questa funzione la puoi richiamare in più contesti diversi… nelle Form, nei Report, nelle Query, da Codice VBA, etc etc etc … vedi gli esempi che ti avevo esposto nel post precedente.