Condividi tramite

azzerra e pulire da comando tutti i campi in maschera

Anonimo
2015-04-26T20:18:02+00:00

salve a tutti,

dal post http://answers.microsoft.com/it-it/office/forum/office\_2007-access/azzerare-le-caselle-testo-e-le-caselle-combinate/3ad6199d-6699-4a48-a774-5910ecf9b092 vorrei attraverso un comando pulire,azzerrare tutti i valori presenti in una mascherea.

nel mio caso è presente anche sottomaschera

con il codice seguente, grazie a Giorgio Rancati, 

Private Sub Comando45_Click()

 Dim ctl As Access.Control

    'Azzero le caselle testo e le caselle combinate

    For Each ctl In Me.Controls

        Select Case TypeName(ctl)

            Case "TextBox", "ComboBox", 

                     ctl.Value = Null

            Case Else

        End Select

    Next

   DoCmd.Requery

End Sub 

tutto funziona.

il mio problema è che nella maschera è presente anche una sottomaschera ed al click del pulsante i campi della maschera vengono azzerati, quelli della sottomaschera restano ed esce il seguente errore:

errore di run time 438

Proprietà o metodo non supportati dall'oggetto.

grazie a Voi tutti

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

30 risposte

Ordina per: Più utili
  1. Anonimo
    2015-04-27T13:54:10+00:00

    Ciao peppeZH,

    che ne diresti di farci vedere qualcosa invece di farci continuare a scrutare nella palla di vetro?...

    Comunque:

    1. Cosa c'è scritto nella proprietà Origine record della sottomaschera?
    2. Cosa c'è scritto nella proprietà Origine controllo della TextBox che crea il problema?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-04-27T13:29:25+00:00

    Caro Maurizio non volermi male...

    ho provato con quanto da te consigliato

    L'errore iniziale era errore di run time 3314. inserire un valore nel campo 'nomemaschera.id' penso corretamente come da te detto

    Errore di run-time '3314':

    Inserire un valore nel campo '<tabella><campo>'.

    sto provando cercando di saltare il campo richiesto su pulisci come da te spiegato.

    Nella maschera la pulizia avviene mentre nella sottomaschera restano i valori ed esce il seguente errore:

    Errore di runtime 3265. Elemento non trovato in questo insieme.

    evidenziandosi di giallo la riga

         If frm.RecordsetClone.Fields(ctl.ControlSource).Required Then

    Scusami e grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-04-27T10:25:11+00:00

    Ciao peppeZH,

    e cosa dice la descrizione dell'errore 3314? Suppongo qualcosa tipo:

    Errore di run-time '3314':

    Inserire un valore nel campo '<tabella><campo>'.

    nel qual caso probabilmente quel campo ha la proprietà "Richiesto = Sì" mentre la routine tenta di assegnare il valore Null.

    Quindi devi decidere cosa fare. Per esempio una di queste cose:

    1. Saltare il campo quando "pulisci".
    2. Cambiare la proprietà "Richiesto".
    3. Mettere a inizio routine:

    On Error Resume Next

    Io preferirei la 1, per esempio così:

    Private Sub ClearCtls(ByVal frm As Access.Form)

    Dim ctl As Access.Control

        For Each ctl In frm.Controls

          Select Case TypeName(ctl)

          Case "TextBox", "ComboBox"

            If Len(frm.RecordSource) > 0 And Len(ctl.ControlSource) > 0 Then

              If frm.RecordsetClone.Fields(ctl.ControlSource).Required Then

                ' SKIP

              Else

                ctl.Value = Null

              End If

            Else

              ctl.Value = Null

            End If

          Case "SubForm"

            ClearCtls ctl.Form

          Case Else

            ' DO NOTHING

          End Select

        Next

        Set ctl = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-04-27T09:31:49+00:00

    Grazie mau come sempre

    ho provato e nella maschera funziona, mentre nella sottomaschera mi esce un errore di run time 3314. inserire un valore nel campo 'nomemaschera.id'.

    sia nella maschera che nella sottomaschera sono presenti gli stessi Id.

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2015-04-27T03:46:37+00:00

    Ciao peppeZH,

    per pulire i controlli di maschera e sottomaschere, un modo:

    Private Sub Comando45_Click()

        ClearCtls Me

        DoCmd.Requery

    End Sub

    ' Questa routine puoi metterla in un Modulo standard,

    ' in modo da averla disponibile per tutti i casi in cui

    ' possa servirti.

    '

    Public Sub ClearCtls(ByVal frm As Access.Form)

    Dim ctl As Access.Control

        For Each ctl In frm.Controls

          With ctl

            Debug.Print TypeName(ctl), .Parent.Name, .Name

          End With

          Select Case TypeName(ctl)

          Case "TextBox", "ComboBox"

            ctl.Value = Null

          Case "SubForm"

            ClearCtls ctl.Form

          Case Else

            ' DO NOTHING

          End Select

        Next

        Set ctl = Nothing

    End Sub

    Quanto all'errore 438, qual è l'istruzione che lo produce? Esegui passo passoper scoprirlo.

    La risposta è stata utile?

    0 commenti Nessun commento