Access VBA: maschera "Foglio dati" e riferimento in ciclo ai singoli controlli

Anonimo
2015-06-22T07:27:31+00:00

Buona giornata

ho questo semplice problema, che schematizzo:

Tabella "Tab1" con un campo "Codice"; maschera "mskTab1" (associata a Tab1) - sulla quale voglio operare in "Visualizzazione Foglio Dati" e quindi con più righe a video -; in VBA, vorrei costruirmi in memoria una tabella con tutti i valori dei codici digitati, ma non trovo l'istruzione giusta per recuperare in ciclo il tutto (Me.Controls.item ....  ??).

Ovviamente ho semplificato, perchè poi ho anche una intestazione, submaschera, ecc., ma su questo - al momento ! - non ho problemi.

Grazie in anticipo per la solita disponibilità

Ivo

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

Risposta accettata dall'autore della domanda

Anonimo
2015-06-23T07:10:32+00:00

ciao Ivo,

con la maschera a machere continue credo che tu debba appoggiarti al recordset della maschera/sottomachera perché il controllo è uno solo anche se al maschera visualizza tutti records del recordset.

La differenza di appoggiarsi alla proprietà recordsetClone rispetto alla recordset della maschera/sottomaschera sta nel fatto che con il primo non sposti il bookmark al movenext di ogni record che viene scrollato, dipende un po' da cosa devi fare...

prova:

Option Compare Database

Option Explicit

Private Sub Esegui_Click()

getNO_bookmarks

getBookmark

End Sub

Sub getNO_bookmarks()

Dim rst As DAO.Recordset

Set rst = Me.msk_Tab1.Form.RecordsetClone

With rst

    Do While Not .EOF

        MsgBox .Fields("id").Value

        rst.MoveNext

    Loop

End With

Set rst = Nothing

End Sub

Sub getBookmark()

Dim rst As DAO.Recordset

Set rst = Me.msk_Tab1.Form.Recordset

With rst

    Do While Not .EOF

        MsgBox .Fields("id").Value

        rst.MoveNext

    Loop

End With

Set rst = Nothing

End Sub

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2015-06-22T14:42:46+00:00

ciao Ivo53,

vediamo se ho capito....

prova questo codice su evento click del command button esegui :

***edit ***

Dim rst As DAO.Recordset

Set rst = Me.msk_Tab1.Form.RecordsetClone

With rst

    Do While Not .EOF

        MsgBox .Fields("id").Value

        rst.MoveNext

    Loop

End With

Set rst = Nothing

dovresti vedere apparire un messaggio che ti mostra nell'ordine 1,2,3.4

**fine edit ***

Private Sub Esegui_Click()

Dim rst As DAO.Recordset

Set rst = Me.msk_Tab1.Form.RecordsetClone

With rst

    Do While Not .EOF

        MsgBox .Fields("testo").Value

        rst.MoveNext

    Loop

End With

Set rst = Nothing

End Sub

dovresti vedere apparire un messaggio che ti mostra nell'ordine A, bb33, cc23,dd12...

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-06-22T16:13:46+00:00

    Grazie, funziona!

    ps: pensavo però ci fosse qualcosa di più "nativo" senza ricorrere ai DAO e Recordset. Comunque va bene lo stesso

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-06-22T14:24:09+00:00

    Ciao, Sandro,

    grazie per la risposta. Non so cosa mi sfugge, ma avrei semplicemente bisogno di capire come reperire i valori dei campi "Testo" (ID=1,2,3,4,ecc.) in questo semplicissimo Data Base di prova, quando premo il tasto "Esegui".

    Grazie e buona giornata

    Ivo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-06-22T08:20:09+00:00

    ciao Ivo53,

    non so ...ti va bene una cosa del genere?

    testata su una sottomaschera dalla maschera principale :

    Private Sub Comando1_Click()

     Dim ctl      As Control

     Dim a()      As Variant

     Dim i        As Integer

     Dim j        As Integer

     Dim ctlValue As Variant

     ReDim a(Me.Impiegati.Form.Controls.Count, 2)

     i = 1

    For j = 0 To Me.Impiegati.Form.Controls.Count - 1

        Set ctl = Me.Impiegati.Form.Controls(j)

        If ctl.ControlType = acTextBox Then

            ctlValue = ctl.Value

            'Debug.Print ctl.Name, ctlValue

        Else

            ctlValue = Null

            'Debug.Print ctl.Name

        End If

        a(i, 0) = ctl.Name

        a(i, 1) = ctlValue

        i = i + 1

    Next

    For i = 0 To UBound(a)

        Debug.Print a(i, 0), a(i, 1)

    Next

    Set ctl = Nothing

    End Sub

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento