Controllo ortografico in textbox

di il
15 risposte

Controllo ortografico in textbox

Buongiorno,

su evento Afterupdate di una textbox ho inserito il comando "acCmdSpelling" come segue:

	DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdSpelling
    DoCmd.SetWarnings True

Tale comando esegue il controllo su tutte le textbox, listbox e combobox della form, io vorrei invece limitarlo alla sola textbox dell'evento indicato.

Se e' fattibile, come dovrei operare?

Grazie in anticipo

15 Risposte

  • Re: Controllo ortografico in textbox

    Se fai una cosa simile:

    If Len(Me!NomeTuaTextBox.Value & vbNullstring)>0 Then
    	Me!NomeTuaTextBox.SetFocus
    	DoCmd.RunCommand acCmdSpelling
    End if
  • Re: Controllo ortografico in textbox

    Ciao Alex,

    la parte di codice che mi suggerisci era gia' anche nel mio codice (non l'avevo postata perche' non pensavo fosse importante).

    Pur passando il setfocus alla casella di testo interessata, il check dello spelling lo fa comunque su tutti i controlli della form...

  • Re: Controllo ortografico in textbox

    Sinceramente ho provato ed a me funziona regolarmente come dovrebbe, ovvero solo sul controllo che lo chiama.

    Sei sicuro di non avere un Loop 

    For each ctl in Me.Controls....

    da qualche parte che può disturbare...? Che ne so su Evento Current o altro...?

  • Re: Controllo ortografico in textbox

    Non ho cicli di loop nella form, ho del codice nell'evento Current ma non influisce sul controllo ortografico.

    Ho inserto due parole non a dizionario in due controlli diversi, ed ho messo il debug sull'evento Current ma non si attiva nel ciclo di correzione, per cui non influisce.

    Anche con il debug sull'evento sottostante non si attivano altri eventi, esegue il controllo sulla textbox, poi se ci sono parole che non riconosce in altre textbox le evidenzia, fino a completare il giro dei controlli. Non si attivano altri eventi....

    Il codice che uso e' il seguente:

    Private Sub sfrmRCctrMEMOtabRCdescrizioneconsuntivo_AfterUpdate()
    On Error GoTo Err_handler
    
        If Len(Me!sfrmRCctrMEMOtabRCdescrizioneconsuntivo.Value & vbNullString) > 0 Then
            Me!sfrmRCctrMEMOtabRCdescrizioneconsuntivo.SetFocus
            DoCmd.RunCommand acCmdSpelling
    
        End If
        
    Exit_Err_handler:
        Exit Sub
    
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    
    End Sub
    
  • Re: Controllo ortografico in textbox

    Aggiungo che ho provato a fare il controllo ortografico in un'altra form molto semplice con 4 textbox in croce; oltre a fare il check sull'update della textbox , lo fa anche sulle altre textobox e su tutti i record ciclandoli uno ad uno (la form ovviamente non era filtrata)

  • Re: Controllo ortografico in textbox

    Anche in questo caso, per aiutarti, forse è più semplice che posti un file di esempio.

  • Re: Controllo ortografico in textbox

    Ho creato un db di esempio: nella form ci sono tre caselle di testo, il codice di controllo dell'ortografia e' sull'evento afterupdate della textbox "Testo1".

    Inserendo parole non a dizionario nelle caselle Testo2 e Testo3 ed anche in altri records, eseguira' il controllo su tutte le textbox e tutti i records.

    Si puo' scaricare qui: https://we.tl/t-xhiCOWJpv0

    E' realizzato con Access 2007-2016

  • Re: Controllo ortografico in textbox

    Cambia il nome dei controlli e prova con il seguente codice

    Option Compare Database
    Option Explicit
    
    Private Sub txtTesto1_Exit(Cancel As Integer)
        ControlloOrtografico Me.txtTesto1
    End Sub
    
    Private Sub txtTesto2_Exit(Cancel As Integer)
        ControlloOrtografico Me.txtTesto2
    End Sub
    
    Private Sub txtTesto3_Exit(Cancel As Integer)
        ControlloOrtografico Me.txtTesto3
    End Sub
    
    Private Sub ControlloOrtografico(ctl As Control)
        DoCmd.SetWarnings False
        With ctl
            .SetFocus
            If Len(.Value & vbNullString) > 0 Then
                .SelStart = 1
                .SelLength = Len(.Value)
                DoCmd.RunCommand acCmdSpelling
                .SelLength = 0
            End If
        End With
        DoCmd.SetWarnings True
    End Sub
  • Re: Controllo ortografico in textbox

    Grazie Stifone per il suggerimento, funziona correttamente.

    Ho salvato la routine ControlloOrtografico in un modulo dichiarandola Public cosi' l'ho potuta richiamare all'occorrenza in diverse forms 

    Grazie ancora a tutti

  • Re: Controllo ortografico in textbox

    Spero di non commettere errori nel riaprire questo post vecchio ormai di 8 mesi, ma l'argomento e' lo stesso perche' sto riscontrando un problema che non riesco a risolvere.

    Riepilogo lo scenario: ho una form con un controllo a schede, in una delle schede e' collocata una subform in cui ho due controlli textbox su cui eseguo il controllo ortografico su evento Exit. La function che esegue il controllo ortografico e' quella suggerita da Stifone:

    Public Function ControlloOrtografico(ctl As Control)
    On Error GoTo Err_handler
    
        DoCmd.SetWarnings False
        With ctl
            .SetFocus
            If Len(.Value & vbNullString) > 0 Then
                .SelStart = 1
                .SelLength = Len(.Value)
                DoCmd.RunCommand acCmdSpelling
                .SelLength = 0
            End If
        End With
        DoCmd.SetWarnings True
    
    Exit_Err_handler:
        Exit Function
        
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    End Function
    

    E viene richiamata in modo analogo su entrambi i controlli nel modo seguente :

    Private Sub sfrmRCctrMEMOtabRCdescrizionelavoro_Exit(Cancel As Integer)
    On Error GoTo Err_handler
       
       ControlloOrtografico Me.sfrmRCctrMEMOtabRCdescrizionelavoro
       
    Exit_Err_handler:
       Exit Sub
    Err_handler:
       MsgBox Err.Number & " " & Err.Description
       Resume Exit_Err_handler
    End Sub

    Il problema che ho notato e' che, se rimane attivo il focus su uno di questi due controlli, mi sposto nella scheda della form principale e scorro i records (o esegui una ricerca), Access esegue il controllo ortografico su tutti i controlli della form attiva (pur non avendo un evento associato alla function), impiegando diversi minuti e bloccando il DB.

    Come potrei risolvere?

  • Re: Controllo ortografico in textbox

    Fai una prova, sostituendo la chiamata del controllo ortografico dall'evento EXIT a BeforeUpdate...

    Puoi anche ottimizzare la chiamata solo se OLD VALUE<>VALE

    Private Sub sfrmRCctrMEMOtabRCdescrizionelavoro_BeforeUpdate(Cancel As Integer)
    On Error GoTo Err_handler
       If sfrmRCctrMEMOtabRCdescrizionelavoro.OldValue <> sfrmRCctrMEMOtabRCdescrizionelavoro.Value Then 
       		ControlloOrtografico Me.sfrmRCctrMEMOtabRCdescrizionelavoro
       End If
    Exit_Err_handler:
       Exit Sub
    Err_handler:
       MsgBox Err.Number & " " & Err.Description
       Resume Exit_Err_handler
    End Sub

    Oppure mettere il controllo di OldValue direttamente nella Funzione:

    Public Function ControlloOrtografico(ctl As Control)
    On Error GoTo Err_handler
    
        With ctl
            If .OldValue = .Value Then Resume Exit_Err_handler
            DoCmd.SetWarnings False
            .SetFocus
            If Len(.Value & vbNullString) > 0 Then
                .SelStart = 1
                .SelLength = Len(.Value)
                DoCmd.RunCommand acCmdSpelling
                .SelLength = 0
            End If
        End With
    
    Exit_Err_handler:
        DoCmd.SetWarnings True
        Exit Function
        
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    End Function
  • Re: Controllo ortografico in textbox

    20/03/2026 - @Alex ha scritto:

    Fai una prova, sostituendo la chiamata del controllo ortografico dall'evento EXIT a BeforeUpdate...

    Avevo gia' provato questa chiamata, ma dava errore non permettendo la correzione in caso di errori ortografici:

    Nel frattempo avevo implementato una modifica spostando il controllo ortografico nell'evento del pulsante che Salva il Record, come segue:

    If Len(Me.sfrmRCctrMEMOtabRCdescrizionelavoro.Value) > 0 Then
            ControlloOrtografico Me.sfrmRCctrMEMOtabRCdescrizionelavoro
        End If

    Comunque il Tuo suggerimento dell'Oldvalue e' interessante, provo ad implementarlo nella function...

    Intanto grazie!

  • Re: Controllo ortografico in textbox

    Testato il suggerimento di @Alex funziona ottimamente ma con alcune piccole modifiche alla function perche' dava errori:

    .oldValue e .value modificati in ctl.oldvalue e ctl.value perche' dava errore "Riferimento non valido o non qualificato"

    Resume modificato con GoTo perche' dava errore "20 Resume senza Error" (evidentemente perche' gia' presente nell'Err_handler)

    Public Function ControlloOrtografico(ctl As Control)
    On Error GoTo Err_handler
        
        If ctl.OldValue = ctl.Value Then GoTo Exit_Err_handler
            DoCmd.SetWarnings False
            With ctl
                .SetFocus
                If Len(.Value & vbNullString) > 0 Then
                    .SelStart = 1
                    .SelLength = Len(.Value)
                    DoCmd.RunCommand acCmdSpelling
                    .SelLength = 0
                End If
            End With
            DoCmd.SetWarnings True
    
    Exit_Err_handler:
        Exit Function
        
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    End Function
    

    La function la richiamo cosi':

    Private Sub sfrmRCctrMEMOtabRCdescrizionelavoro_Exit(Cancel As Integer)
    On Error GoTo Err_handler
    
        If Len(Me.sfrmRCctrMEMOtabRCdescrizionelavoro.Value) > 0 Then
            ControlloOrtografico Me.sfrmRCctrMEMOtabRCdescrizionelavoro
        End If
    
    Exit_Err_handler:
        Exit Sub
    
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    
    End Sub
    

    Grazie ancora

  • Re: Controllo ortografico in textbox

    Perchè hai messo il riferimento prima di WITH CTL svista imperdonabile, IL MIO CODICE ERA CORRETTO...!

    La modificherei così, fai attenzione al SetWarning TRUE, che se hai un errore nel tuo codice non viene ripristinato, sotto è meglio...

    Public Function ControlloOrtografico(ctl As Control)
    	On Error GoTo Err_handler
        With ctl
        	If Len(.Value & vbNullString)=0 Then GoTo Exit_Err_handler
        	If .OldValue = .Value Then GoTo Exit_Err_handler
            DoCmd.SetWarnings False
            .SetFocus
            If Len(.Value & vbNullString) > 0 Then
            	.SelStart = 1
                .SelLength = Len(.Value)
                 DoCmd.RunCommand acCmdSpelling
                .SelLength = 0
            End If
    	End With
    
    Exit_Err_handler:
        DoCmd.SetWarnings True
        Exit Function
        
    Err_handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Err_handler
    End Function

    Quindi la richiami così:

    Private Sub sfrmRCctrMEMOtabRCdescrizionelavoro_Exit(Cancel As Integer)
    
        ControlloOrtografico Me.sfrmRCctrMEMOtabRCdescrizionelavoro
    
    End Sub

    Non serve gestione errori in questa, c'è già nella Funzione chiamata.

Devi accedere o registrarti per scrivere nel forum
15 risposte