Errore 438 su tag

di il
5 risposte

Errore 438 su tag

Vorrei attivare dei controlli con determinati tag, ma ricevo l'errore 438

I controlli sono di vario tipo : etichetta, casella di testo, casella di controllo, pulsanti.

So che alcuni controlli non supportano tale funzione quindi??

Function campi_attivare()
Dim ctl As Access.Control
For Each ctl In Me.Controls
If Not IsNull(Me.data) Then
    If ctl.Tag = "attiva" Then
        ctl.Enabled = True
    End If
End If
Next ctl
End Function

5 Risposte

  • Re: Errore 438 su tag

    E' una proprietà non una funzione.

    Devi inserire una ulteriore If prima di quella che controlla il tag.

    Questa if deve tesatare il tipo di controllo rappresentato da ctr.

    Per i controlli che non hanno tag non puoi fare nulla

  • Re: Errore 438 su tag

    10/03/2023 - lucavalentino ha scritto:


    Vorrei attivare dei controlli con determinati tag, ma ricevo l'errore 438

    I controlli sono di vario tipo : etichetta, casella di testo, casella di controllo, pulsanti.

    So che alcuni controlli non supportano tale funzione quindi??

    Function campi_attivare()
    Dim ctl As Access.Control
    For Each ctl In Me.Controls
    If Not IsNull(Me.data) Then
        If ctl.Tag = "attiva" Then
            ctl.Enabled = True
        End If
    End If
    Next ctl
    End Function
    

    Innanzitutto se hai un controllo con la Label Associata, è sufficiente gestire il controllo… quindi se hai TextBox+Label se rendi Enabled=False la TextBox automaticamente lo diventa la Label, questo accade per tutti i controlli equivalenti di tipo Bound con possibilità di aggregazione della Label.

    Detto questo, io farei cosi:

    Function campi_attivare(Value as String)
    Dim ctl As Access.Control
    If IsNull(Me.data) Then Exit Function
    For Each ctl In Me.Controls
    	Select case ctl.Type
    		Case is Access.AcControlType.acComboBox, Access.AcControlType.acTextBox, ecc...
    			ctl.Enabled = ctl.Tag=Value 
        End Select
    Next ctl
    End Function

    Poi la richiami così:

    Call campi_attivare("Attiva")

  • Re: Errore 438 su tag

    Ho associato le label al controllo  e gestito solo i controlli

    Ho usato If TypeOf ctl Is TextBox  or If TypeOf ctl Is Combox mentre @Alex mi ha suggerito Select case ctl.Type
    Case is Access.AcControlType.acComboBox

    Mi stavo chiedendo meglio un if o un select case? 

  • Re: Errore 438 su tag

    11/03/2023 - lucavalentino ha scritto:


    Mi stavo chiedendo meglio un if o un select case? 

    A quanto ne so, producono lo stesso output di compilazione i Select Case e gli If…ElseIf. È quindi più una questione di stile.

    Con il Select Case è più agevole creare i “casi” da testare ed essendo meno verboso è più facile da manutenere come codice.

  • Re: Errore 438 su tag

    Io preferisco usare sempre il SELCT CASE per almeno 2 motivi:

    1. Il codice è estremamente più ordinato alla vista, ma questo è soggettivo
    2. Risulta molto più efficiente e flessibile in caso di criteri multivalore… puoi fare la lista invece che concatenare OR
    Case Is>40, 20, 10, 2 To 6

    Ovviamente va considerato che esegue solo ed esclusivamente un CASE invece If then … se non metti l'uscita potrebbe eseguire tutti i confronti a meno di usare elseif

    Questo non è un difetto ma una differrnza da conoscere e sfruttare, ovvio che mettere tanti If può risultare utile ma meno efficiente.

Devi accedere o registrarti per scrivere nel forum
5 risposte