Grazie per tutte le risposte.
Anche se avrei bisogno di farlo da codice (visto che ho altre istruzioni nell evento su Corrente), ho corretto la sintassi come suggerito per vedere se la macro comunque funziona.
Ma c'è qualcosa che non quadra. Ora non so se perchè ho impostato male le condizioni della macro. Ma ho seguito quanto suggerito da OsvaldoLaviosa
Attento alla sintassi DCount, io ricordo che ha 3 argomenti separati da ; poi credo che andrebbe scritta così (almeno nelle macro, non so in VBA):
DCount("*";"tblDocumenti";"")=0
e
1) Crea una nuova macro e apri la colonna Condizioni
2)
1. Al primo rigo condizioni ci scrivi la sintassi relativa al DCount=0
2. Al primo rigo Azioni scegli ImpostaValore e sotto scrivi:
Elemento: [Maschere]![nome maschera]![nome controllo pulsante].[Enabled]
Espressione: Vero
3)
1. Al secondo rigo condizioni scrivi la sintassi relativa al DCount>0
2. Al secondo rigo condizioni scegli ImpostaValore e sotto scrivi:
Elemento: [Maschere]![nome maschera]![nome controllo pulsante].[Enabled]
Espressione: Falso
4) Salva la macro con nome "AbilitaAggiungiRecord"
5) Vai in visualizzazione struttura maschera (adesso non ricordo più quale) e, all'evento "Su corrente" associa la macro AbilitaAggiungiRecord
Per completezza posto anche i pezzi di codice che accadono nella sequenza degli eventi. Magari può servire a risolvere il problema.
La frmDocumenti viene aperta dall'evento click del cmdDocumenti nella frmContatti:
questo il codice del button (ho modificato una routine che avevo trovato in un libro):
Private Sub cmdDocumentiContatto_Click()
'Messaggio preliminare per richiedere se si vuole o no aprire la maschera documenti contatto
If MsgBox("Visualizzare la maschera DOCUMENTI CONTATTO?", vbYesNo + vbQuestion + vbDefaultButton2, AppTitle) = vbYes Then
'ho scelto YES ed esegue la routine di apertura della maschera sincronizzandosi con IDContatto
On Error GoTo Err_cmdDocumentiContatto_Click
Dim frmName As String
Dim frmName1 As String
Dim Criterio As String
frmName = "frmDocumenti"
frmName1 = "frmDocumentiAdd"
Criterio = "[IDContatto]=" & Me![IDContatto]
'Controllo preliminare per verificare se nella tabella tblDocumenti esistono dati
'*********************questo è l'esempio***********************************
'IF DCOUNT("*","NomeTabella","CRITERIO se serve")>0 Then
'Docmd.OpenForm "NomeForm"
'Else
'MsgBox "Non ci sono Record"
'End If
'******************************************************************************
If DCount("*", "tblDocumenti", Criterio) > 0 Then
'se la tabella contiene dati allora apre la frmDocumenti
DoCmd.OpenForm frmName, , , Criterio
Else
'diversamente avvisa che non ci sono record e se si vogliono aggiungere dati
If MsgBox("Non esistono DOCUMENTI CONTATTO. Vuoi Aggiungere?", vbYesNo + vbQuestion + vbDefaultButton2, AppTitle) = vbYes Then
'in caso affermativo apre la frmDocumentiAdd
DoCmd.OpenForm frmName1, , , Criterio, acFormAdd, acDialog
End If
End If
Exit_cmdDocumentiContatto_Click:
Exit Sub
Err_cmdDocumentiContatto_Click:
MsgBox Err.Description
Resume Exit_cmdDocumentiContatto_Click
Exit Sub
'ho scelto NO: semplicemente esce dalla sub
Else
Exit Sub
End If
End Sub
La frmDocumenti si apre e nell'evento open ho:
Private Sub Form_Open(Cancel As Integer)
'imposta IDContatto corrente come predefinito nella maschera frmDocumenti
If Aperta("frmContatti") Then
IDContatto.DefaultValue = Forms!frmContatti!IDContatto
End If
'blocca e disabilita tutti i controlli della maschera
Dim ctl As Variant
On Error Resume Next
For Each ctl In Me.Controls
If ctl.Enabled = True Then ctl.Enabled = False
If ctl.Locked = False Then ctl.Locked = True
Next ctl
'e setta i cmd da tenere abilitati
Me.cmdClose.Enabled = True
Me.cmdModifica.Enabled = True
Me.cmdAddNew.Enabled = True
End Sub
nell'evento Current della frmContatti (la maschera principale) ho:
'sincronizza frmDocumenti e frmContatti
'mediante un filtro su IDContatto
'utilizza funzione Aperta settata nel Modulo Varie
If Aperta("frmDocumenti") Then
Forms!frmDocumenti.Filter = "IDContatto = " & Nz(IDContatto, 0)
End If
mentre nell'evento current della frmDocumenti ho alcune istruzioni sulla visibilità di controlli in funzione della scelta di una combo box, che credo sia ininfluente ai fini della soluzione del problema posto.
Altra informazione utile è che la frmDocumenti ha le proprietà Immissione Dati,Consenti Aggiunte, Consenti Eliminazioni, Consenti Modifiche e Consenti Filtri impostate a no.
Va segnalato che i codici postati non sono farina del mio sacco ma solo il riadattamento alle mie esigenze di codici trovati nella guida, in alcuni libri e nel web.
Sicuramente esistono soluzioni stilisticamente più corrette e lineari, ma visto che tutto quanto ho postato funziona mi accontento visto che non devo costruire un applicativo per qualcuno ma semplicemente per me stesso.
E allora adotterò la soluzione proposta da OsvaldoLaviosa:
Semplicemente associa ad ogni pulsante l'evento Clic--->ApriMaschera e basta, senza fare controlli DCount o chicchessia. Ce l'hai vuoto--->Aggiungi record. Ce l'hai con almeno un record--->lo guardi alcuni secondi e poi decidi se modificare/aggiungere record oppure chiudere la maschera
Anche se non era quello che avrei voluto fare e che purtroppo le mie scarse conoscenze di VBA non mi consentono di andare oltre.
Grazie per il tempo e l'attenzione dedicata.