Sto creando delle maschere in access e vorrei fare un controllo su quello che l'utente immette nelle textbox, cioè se l'utente immette dei dati non validi non deve avvennire la scrittura del db, ma deve apparire un msg di errore.
Sto creando delle maschere in access e vorrei fare un controllo su quello che l'utente immette nelle textbox, cioè se l'utente immette dei dati non validi non deve avvennire la scrittura del db, ma deve apparire un msg di errore.
In pratica quello che vorri fare è questo, ma non funge
Option Compare Database
Private Sub Comando2_Click()
On Error GoTo Err_Comando2_Click
Dim stDocName As String
nome.Value
If nome.Text = "" Then
MsgBox ("Attenzione")
End If
stDocName = "Query1"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Exit_Comando2_Click:
Exit Sub
Err_Comando2_Click:
MsgBox Err.Description
Resume Exit_Comando2_Click
End Sub
Risolto:
Me!nome.SetFocus
If nome.Text = "" Then
MsgBox ("Attenzione")
Else
..
..
Pensavo di aver risolto, ma invece.. il controllo funziona sola se associato ad una texbox se lo applico a due non va,se attivo le due textbox mi dice che non può far riferimento ad un oggetto non attivo.
Che faccio?
Una buona guida online di vba?
Prova così: sull' ON_CLICK del pulsante metti:
Ciaocodice:if Me.CampoTesto_1 = "" or Me.CampoTesto_2 = "" then MsgBox ("Attenzione") else DoCmd.OpenQuery "Query1", acNormal, acEdit end if
Non hai bisogno di settare il fuoco sui 2 campi per controllarne il valore.
DaryL74
Ma tu non definisci il focus perchè non fai Me.CampoTesto_1.text="", cmq cosi non funge. Una domanda che differenza c'è tra Me!.campo e Me.Campo?
Grazie
![]()
Allora "Me!.CampoTesto_1" non si può scrivere. La sintassi è: "Me!CampoTesto_1" oppure Me.CampoTesto_1".
La differenza non te la so spiegare.
In ogni caso: Ho creato una maschera con due campi testo:
"CampoTesto_1"
"CampoTesto_2"
ed un pulsante:
"Comando2"
sull'evento CLIC del pulsante ho scritto questa macro e funziona:
Prova a seguire questo esempio. Che nomi hanno i tuoi campi di testo ?codice:Private Sub Comando2_Click() On Error GoTo Err_Comando2_Click If Me.CampoTesto_1 = "" Or IsNull(Me.CampoTesto_1) Or Me.CampoTesto_2 = "" Or IsNull(Me.CampoTesto_2) Then MsgBox ("Attenzione") Else MsgBox ("Eseguito") DoCmd.OpenQuery "Query1", acNormal, acEdit End If Exit_Comando2_Click: Exit Sub Err_Comando2_Click: MsgBox Err.Description Resume Exit_Comando2_Click End Sub
Riguardo al settaggio del fuoco sul campo: intendevo che per stabilire qual'è il valore di un campo di testo questo non deve per forza essere selezionato. La sintassi che ti ho scritto rileva il valore presente nel campo indipendentemente dal controllo selezionato.
Ciao
DaryL74
altrimenti puoi mettere il codice qui sotto nell'evento lostfocus:
codice:Private Sub CampoTesto1_LostFocus() if CampoTesto1.Text ="" then 'o quello che vuoi MsgBox "Messaggio" CampoTesto1.SetFocus end if End Sub
*** Rachele TI AMO DA MORIRE!!! ***
Ho provato con questa funzione
Che viene richiamata da questa procedureFunction IsNothing(varToTest As Variant) As Integer
IsNothing = True
Select Case VarType(varToTest)
Case vbEmpty
Exit Function
Case vbNull
Exit Function
Case vbBoolean
If varToTest Then IsNothing = False
Case vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency
If varToTest <> 0 Then IsNothing = False
Case vbDate
IsNothing = False
Case vbString
If (Len(varToTest) <> 0 And varToTest <> " ") Then IsNothing = False
End Select
End Function
Però non funziona, o meglio funziona solo se entrambi i campi sono di tipo text,se uno è di tipo text e uno numererico non va..
Private Sub inserisci_Click()
On Error GoTo Err_Comando2_Click
Dim stDocName As String
If IsNothing(Codice_G) Or IsNothing(Luogo) Then
MsgBox ("ERRORE")
Else
stDocName = "query1"
DoCmd.OpenQuery stDocName, acNormal, acEdit
End If
End Sub
Come mai?