Errore 438 su tag

di lucavalentino il
5 risposte

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

  • 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

  • 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")

  • 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? 

  • 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.

  • 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