Segnalazione di Errore con Funzione DMax

Anonimo
2018-04-04T13:30:43+00:00

Salve a tutti, ho una tabella "Oggetti" che, tra i vari campi ne ha uno denominato "Cod/N", questo campo deve contenere una numerazione del tipo 0001/2018, ovvero una numerazione di 4 cifre, la barra / e l'anno attuale., vorrei che quando si apre la maschera, nel campo specifico venga caricato in automatico l'ultimo valore inserito incrementato di una unità, ovvero se l'ultimo valore inserito è 0020/2018 il nuovo dovrà essere 0021/2018 e così via.

Nel campo Cod/N della maschera ho inserito, come valore predefinito la seguente:

="" & Format(IIf(IsNull(DMax("[Cod/N]";"[Oggetti]";"[Cod/N] like '????/" & Format(Date();"aaaa") & "'"));1;Mid(DMax("[Cod/N";"[Oggetti]";"[Cod/N] like '????/" & Format(Date();"aaaa") & "'");1;4)+1);"0000") & "/" & Format(Date();"aaaa")

risultato: con la tabella vuota, all'apertura della maschera, nel campo indicato viene automaticamente riportato "0001/2018", quindi sembra funzionare tutto bene ma, nel momento in cui registro il record e apro nuovamente la maschera per passare al record succesivo, nel campo Cod/N viene riportato: #Errore.

Qualcuno sa dirmi dove commetto l'errore?

Grazie per la collaborazione

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

11 risposte

Ordina per: Più utili
  1. Anonimo
    2018-04-04T15:19:15+00:00

    Non ti preoccupare siamo qui per aiutarti.

    Quello che devi creare è un codice (routine evento o anche detto modulo di classe).

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-04-04T15:08:46+00:00

    Ciao, scusa l'ignoranza ma, quello che per te rappresenta l'ovvio per me diventa insormontabile, come già ti ho detto sono un neofita di Access per cui alcune cose mi sono ancora incomprensibili.

    Dunque ho creato un nuovo modulo (in VBA) e ci ho incollato il tuo codice, quello che ancora non riesco a capire è come, nell'evento "su caricamento" impostare il nome controllo = NuovoCod().

    Se all''evento su caricamento clicco sui tre puntini, posso:

    1. generare una macro;
    2. generare una espressione;
    3. Generare un codice

    ma qui mi perdo e non so cosa fare, puoi per favore essere più chiaro?

    ti ringrazio per l'aiuto

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-04-04T14:55:11+00:00

    Ciao,

    non devi creare una routine evento ma un nuovo modulo (con nome quello che preferisci) dove ci incolli il codice (che dobbiamo verificare) .

    Nella maschera puoi, ad esempio, nell'evento su caricamento impostare il nomeControllo = NuovoCod().

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-04-04T14:34:14+00:00

    Ciao Mimmo e grazie per la risposta

    non sono molto pratico di VBA ma, se mi dai un aiutino forse riesco a inserire quanto mi hai suggerito, cioè dove devo inserire il codice, con quale evento? e come faccio a richiamare nella maschera con =NuovoCod()?

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2018-04-04T14:04:34+00:00

    Ciao,

    non sarebbe meglio semplificarti la vita utilizzando una funzione del tipo:

    Option Compare Database

    Option Explicit

    Function NuovoCod()

         Dim wCod As String

         wCod = DMax("[Cod/N]", "[Oggetti]")

         If Len(wCod & "") = 0 Then

            NuovoCod = "0001/" & Year(Date)

         Else

            NuovoCod = Format(Val(Left(wCod, 4)) + 1, "0000") & "/" & Year(Date)

         End If

    End Function

    Richiamandola nella maschera con :

    =NuovoCod()

    Ciao Mimmo

    P.s. L'approccio migliore sarebbe stato avere due campi distinti in tabella Anno e Progressivo (numerico) da formattare in maschera o report.

    La risposta è stata utile?

    0 commenti Nessun commento