07/09/2025 - Scolaretto ha scritto:
Buongiorno,
Vorrei estrarre da una form i dati contenuti nella finestra delle proprietà di una casella di testo o di una combo.
Per estrarre i vari nomi creo un Set in cui inserisco la form e poi con una variabile di tipo controls leggo i vari nomi.
Vorrei fare la stessa cosa anche per i valori contenuti nei vari label delle proprieta e possibile
Dim frm As Form
Dim ctl As Control
Set frm = Forms("test") 'seleziono ogni singola maschera
''' Leggo tutti i controlli
For Each ctl In frm.Controls
If TypeName(ctl) = "textBox" Or TypeName(ctl) = "ListBox" Or TypeName(ctl) = "ComboBox" Then
Debug.Print frm.Name, ctl.Name
Debug.Print ctl.Controls
End If
Next
Set frm = Nothing
Grazie
Questa riga è relativamente errata, se poi serve ti spiego cosa intendo per relativamente:
Debug.Print ctl.Controls
Tu in realtà vuoi ciclare le properties... quindi la cosa sarebbe più complessa, si tratta di un Ciclo For...Each sulla collection Properties, da li stampi la P.Name e la P.Value, ma se devi interrogare solo la property="ControlSource", non ha senso... interroga quella
Giusto a titolo di interesse:
Dim p As DAO.Property
Dim ctl As Accecc.Control
For each ctl in me.Controls
Select Case ctl.ControlType
Case Is = acTextBox, acComboBox, ListBox
For Each p In ctl.Properties
Debug.Print "PName: " & p.Name, "P.Value: " & p.Value
Next
End Select
Next
Mel tuo catso tuttavia se basta come mi pare di aver capito il ControlSource non ne vale la pena e puoi usare queste sintassi:
Debug.Print ctl.ControlSource
o
Debug.Print ctl.Properties("ControlSource").Value
Faccio una ulteriore osservazione, qualche versione fa la funzione TypeName non era disponibile, e si usava questa forma che però io continuerei ad usare al posto del TypeName, o ancora meglio come mostrato sopra la property "ControlType" dell'oggetto:
If TypeOf ctl Is TextBox Then