Condividi tramite

Pulsante Salva e Nuovo record sotto condizione.

Anonimo
2017-03-28T15:27:33+00:00

Buonasera !

In un piccolo database, ho un paio di tabelle collegate una a molti.

Su questa relazione ci sono due maschere.

In particolare sulla maschera X principale c'è un campo data, e nella sottomaschera Z ci sono dei campi per gestire la contabilità.

In particolare nella sottomaschera Z ci sono: 

  • Codice Conto
  • Descrizione Conto
  • Tipo Operazione (che può essere Dare o Avere)
  • Importi

Nel pie di pagina della maschera X principale c'è un pulsante di nome Salva e Nuovo.

Dietro questo pulsante c'è il seguente codice VBA (convertito da una macro):

..................................................................................................

Function Salva_e_Nuovo_Record()

On Error GoTo Salva_e_Nuovo_Record_Err

    If (Forms!SALDO!SALDO = 0) Then

        DoCmd.GoToRecord , "", acNewRec

    Else

        Beep

        MsgBox "ATTENZIONE, NON E' POSSIBILE SALVARE IL RECORD. IL TOTALE DI COLONNA DARE E' DIVERSO DAL TOTALE DI COLONNA AVERE.", vbOKOnly, "ATTENZIONE !!!"

        DoCmd.GoToRecord , "", acLast

    End If

Salva_e_Nuovo_Record_Exit:

    Exit Function

Salva_e_Nuovo_Record_Err:

    MsgBox Error$

    Resume Salva_e_Nuovo_Record_Exit

End Function

......................................................

Questo codice VBA fa riferimento ad una query SALDO, che deve avere valore 0 per permettere l'aggiornamento del record della sottomaschera Z.

La logica di ciò è che nella sottomaschera Z il totale della colonna DARE dev'essere uguale al totale della colonna AVERE, altrimenti la registrazione non si può chiudere con l'aggiornamento.

Ho provato a fare una prova, cioè a sbagliare un importo nella registrazione, ma esce il seguente errore:

Microsoft Access: impossibile trovare la maschera SALDO:

* a cui viene fatto riferimento.  E' possibile che la maschera a cui viene fatto riferimento sia chiusa o che non esista nel database.  E' possibile che "Microsoft Access abbia rilevato un errore di compilazione in un modulo Visula Basic per la maschera.

Che si può fare per risolvere il problema ?

Microsoft 365 e Office | Accesso | 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

Risposta accettata dall'autore della domanda

  1. Anonimo
    2017-03-28T20:59:27+00:00

    ciao Roberto,

    beh, si ha ragione lui...nel senso che fai riferimento esplicito ad un ad un controllo che sia chiama saldo nella form saldo.

    Esiste nel tuo db ? pare di no.

    Controlli nella forms e nei reports, campi solo in tabelle e queries.

    ho provato ad abbozzare un'ipotesi, qui.

    solo per tuo riferimento lo scenario non è detto coincida...ma volevo cestinarlo, ma visto che l'avevo preparato...

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-03-29T15:59:31+00:00

    ciao Roberto,

    prova come segue ,testato sulla mia demo.

    Option Compare Database

    Dim rst  As DAO.Recordset

    Dim bool As Boolean

    Private Sub cmdNewRecord_Click()

    Set rst = DBEngine(0)(0).OpenRecordset("q_saldo", 4)

    If Not rst.EOF Then

        With Me.M_dettaglio

            !txtSaldo = rst.Fields(5)

            !txtSaldo.Visible = !txtSaldo

            '!lblWarning.Visible = !txtSaldo

            !txtSaldo.BackColor = vbRed

            Select Case !txtSaldo

                    Case Is <> 0

                        VBA.MsgBox prompt:="Attenzione. C'è una squadratura tra il Dare e l'Avere. Correggere o il record non viene aggiornato", _

                           buttons:=vbCritical, _

                           title:="Attenzione"

                           bool = True

                    Case Else

                         If bool Then

                            VBA.MsgBox prompt:="Correzione effettuata. Il record si aggiorna", _

                                      buttons:=vbInformation, _

                                      title:="Attenzione"

                         End If

                         DoCmd.GoToRecord acDataForm, Me.Name, acNewRec

            End Select

        End With

    End If

    End Sub

    Private Sub Form_Current()

    'With Me.M_dettaglio

    '    !txtSaldo.Visible = False

    '    !lblWarning.Visible = False

    'End With

    bool = False

    End Sub

    occhio alle parti in grassetto.

    ciao, Sandro

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-03-29T12:03:00+00:00

    ciao Roberto,

    [...]

    Ho provato con la funzione DLookUp messa nella macro, ma non funziona.

    Ho controllato le maschere caricate nel DB, e la maschera SALDO esiste.

    Poi l'unico campo della maschera, l'ho chiamato txtSALDO.

    [...]

    non uso macro, ma se non metti a disposizione il file come possiamo capire cosa non funziona se ci dici solo non funziona....? :-))))

    nel post precedente dicevo :

    [...]

    Controlli nella forms e nei reports, campi solo in tabelle e queries.

    [...]

    tienine conto per la prossima volta.

    la risposta è nell'errore :

    [...]

    "Microsoft Access: impossibile trovare la maschera SALDO:

    * a cui viene fatto riferimento.  E' possibile che la maschera a cui viene fatto riferimento sia chiusa o che non esista nel database.  E' possibile che "Microsoft Access abbia rilevato un errore di compilazione in un modulo Visula Basic per la maschera."

    [...]

    o il riferimento è errato o la maschera è chiusa.

    [...]

    Circa il file di Sandro, ho provato il file, e funziona bene.

    Unica cosa, il colore rosso della cella copre il numero. Meglio il numero rosso su sfondo bianco.

    Comunque l'automatismo con VBA funziona.

    [...]

    E' solo una demo dimostrativa c'è molto da sistemare...il colore è un dettaglio e ci sono molti altri modi per porre evidenza a quella discrepanza...ne ho scelto 1... :-)

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2017-03-28T19:45:27+00:00

    Ciao,

    cosa rappresenta :  If (Forms!SALDO!SALDO = 0) Then

    se Saldo è una query dovresti utilizzare Dlookup("Saldo","Saldo", condizione)

    Ciao Mimmo

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  4. Anonimo
    2017-03-29T09:08:58+00:00

    Buongiorno a tutti !

    Ho provato con la funzione DLookUp messa nella macro, ma non funziona.

    Ho controllato le maschere caricate nel DB, e la maschera SALDO esiste.

    Poi l'unico campo della maschera, l'ho chiamato txtSALDO.

    Nella macro di prima, postata ieri, ho scritto:  If [Maschere]!SALDO![txtSALDO] = 0 Then

    ma esce il seguente errore:

    "Microsoft Access: impossibile trovare la maschera SALDO:

    * a cui viene fatto riferimento.  E' possibile che la maschera a cui viene fatto riferimento sia chiusa o che non esista nel database.  E' possibile che "Microsoft Access abbia rilevato un errore di compilazione in un modulo Visula Basic per la maschera."

    Poi esce la maschera dell'errore con questi dati:

    Nome Azione:

    ImpostaVarLocale

    Argomenti:

    __*LO_;[Forms]![SALDO]![txtSALDO]=0

    Numero Errore: 2450

    Se la maschera esiste nel database, perchè non la riconosce ??

    Circa il file di Sandro, ho provato il file, e funziona bene.

    Unica cosa, il colore rosso della cella copre il numero. Meglio il numero rosso su sfondo bianco.

    Comunque l'automatismo con VBA funziona.

    La risposta è stata utile?

    0 commenti Nessun commento