Newsgroup: it.comp.appl.access
Titolo: nomi dei controlli della maschera duplicati nel MsgBox

Ciao a tutti. Prendendo spunto da un esempio di Alessandro Baraldi e Roberto
presente nel Sito Comune, volevo sull'evento click di un pulsante,
individuare quali fossero i controlli di una maschera privi di dati:
Dim ctl As Control
Dim testo As String
Dim messaggio As String
    For Each ctl In Me.Controls
            If ctl.Visible And ctl.ControlType = acTextBox Then
                If ctl.Tag = "OBBLIGATORIO" Then
                    If IsNull(ctl.Value) Or ctl.Value = "" Then
                    testo = (ctl.Controls(0).Caption)
                    Set ctl = Nothing
                    Cancel = True
                    End If
                End If
            End If
   messaggio = messaggio & " - " & vbCrLf & testo
   Next
   MsgBox "Devi completare i segg. controlli: " & messaggio
Volevo far comparire un msgBox con l'elencoi dei controlli. Funziona, ma
nell messaggio i nomi dei controlli vengono ripetuti 2 volte.
Dove sbaglio?
Grazie a tutti.
Giancarlo.

 wrote in message
news:dd9sl5$fc6$
1...@carabinieri.cs.interbusiness.it

Io modificherei questo:
testo = (ctl.Controls(0).Caption)
In:
testo = ctl.Name
ma la composizione della stringa Messaggio deve essere
inserita nel controllo IF...END IF altrimenti ovviamente
la componi anche quando il controllo non è vuoto....!
.......
If ctl.Visible And ctl.ControlType = acTextBox Then
      If ctl.Tag = "OBBLIGATORIO" Then
           If IsNull(ctl.Value) Or ctl.Value = "" Then
                testo = (ctl.Controls(0).Caption)
                Set ctl = Nothing
                Cancel = True
                messaggio = messaggio & " - " & vbCrLf & testo
           End If
      End I
End If
.....
Ciao
@Alex    
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:751562a5daf478b393...@mygate.mailgate.org...

Vero. Funziona! Grazie 1000
Un dubbio: in che ordine vengono proposti in nomi dei controlli nel
messaggio? Non è alfabetico e non è in funzione dell'ordine di tabulazione.
E' possibile ordinarli in funzione dell'ordine di tabulazione?
Grazie.
GIancarlo

 GIancarlo
Hanno un ordine d'indicizzazione.
La collection Controls punta ad un Indice da 0 a Count-1
Il ciclo sulla collection percorre esattamente l'indicizzazione.
Non è possibile ordinarli per tabulazione.
Saluti


 GIancarlo
Forse non ne val la pena, ma è possibile.
Metti questa Sub in un Modulo (ti può servire anche in altre  circostanze):
----------------------------------------------
Public Sub ShellSort(ShellSortArray() As Double, Optional ASC As Boolean = 
True, _
                    Optional FlagStampa As Boolean = False)
Dim Temp, i As Integer, Done As Boolean
Dim Gap As Integer, Max As Integer, n As Integer
n = UBound(ShellSortArray)
Max = n
Gap = Max / 2
Do While Gap >= 1
    Do
        Done = True
        For i = 1 To Max - Gap
            If ASC Then '   Ordinamento crescente
                If ShellSortArray(i) > ShellSortArray(i + Gap) Then
                    Temp = ShellSortArray(i)
                    ShellSortArray(i) = ShellSortArray(i + Gap)
                    ShellSortArray(i + Gap) = Temp
                    Done = False
                End If
            Else    '   Ordinamento decrescente
                If ShellSortArray(i) < ShellSortArray(i + Gap) Then
                    Temp = ShellSortArray(i)
                    ShellSortArray(i) = ShellSortArray(i + Gap)
                    ShellSortArray(i + Gap) = Temp
                    Done = False
                End If
            End If
        Next
    Loop While Not Done
    Gap = Int(Gap / 2)
Loop
If FlagStampa Then
    For i = 1 To n
        Debug.Print i, ShellSortArray(i)
    Next
End If
End Sub
--------------------------------------
Poi attiva quest'altra con un Button:
---------------------------------------------
Private Sub Command13_Click()
Dim i, j, k As Integer, IndexArray_0() As Double, IndexArray() As Double, 
NameArray() As String
For Each i In Me.Controls
    If i.Visible And i.ControlType = acTextBox Then
        k = k + 1
        ReDim Preserve IndexArray_0(1 To k)
        ReDim Preserve IndexArray(1 To k)
        ReDim Preserve NameArray(1 To k)
        IndexArray_0(k) = i.TabIndex
        IndexArray(k) = i.TabIndex
        NameArray(k) = i.Name
    End If
Next
ShellSort IndexArray
For Each i In IndexArray
    For j = 1 To k
        If i = IndexArray_0(j) Then
            Debug.Print i & ")   " & NameArray(j)
            Exit For
        End If
    Next
Next
End Sub
----------------------------------------------
Bruno