Newsgroup: it.comp.appl.access
Titolo: Ciclare controlli con più tag errore di run-time 9- indice non incluso nell'intervallo"

Data una form con più controlli, ho inserito più tag (X/Y/Z)
all'interno degli stessi.
Ora ciclando i controlli della form avrei la necessità a seconda del
valore del tag che si verifichino determinati eventi.
Ho preso spunto da un precedente post di Karl Donaubauer e Alessandro
Cara dove si affrontava il problema
(
http://groups.google.it/group/it.comp.appl.access/browse_thread/
thread/cf62afd6d095cc64/f1b60e72c713a2c1?
lnk=gst&q=tag#f1b60e72c713a2c1) e tutto funziona finchè i tag sono
due, altrimenti se maggiori di due viene restituito "errore di run-
time 9- indice non incluso nell'intervallo", riporto la sub da me
utilizzata:
Sub CmdControlla()
Dim ctl As Control
'valori TAG in controlli:X/Y/Z
'posizione Array:  0/1/2
For Each ctl In Me.Controls
        If Split(ctl.Tag & "/", "/")(2) = "Z" Then
        Debug.Print ctl.Name
        End If
Next
End Sub
Mi dareste una mano?
Grazie

 Grazie
Secondo me non tutti i tag hanno tre elementi.
Se manca il terzo elemento (indice=2) e' normale che ti prenda errore
--
ac


wrote:

Ciao Alessandro,
avevo pensato anche io questa cosa e ho riverificato tutto, i tre tag
sono presenti su tutti i controlli.
Comunque ho provato anche a costruire nuova form con quattro controlli
ed impostare tre tag (X/Y/Z) per controllo, mi viene restituito lo
stesso errore.


Uhmmm......fai cosi' e vedi se continua  a prenderti errore:
If Split(ctl.Tag&    "///", "/")(2) = "Z" Then



Funziona!
Ma perchè funziona con "///", puoi spiegarmelo?


Sei sicuro che l'errore non si presenta già con 2 valori nel Tag?
L'errore di solito succede se nella maschera si trova un controllo
che non ha la proprietà Tag, p.e un'etichetta o un pulsante.
Puoi trovarlo con un altro
Debug.Print ctl.Name
_prima_ della riga con If Split...
L'ultimo controllo scritto nella finestra debug è il controllo cattivo.
Se vuoi escludere un controllo particolare puoi usare
For Each ctl In Me.Controls
  If ctl.Name <> "MioControlloCattivo" Then
        If Split(ctl.Tag & "/", "/")(2) = "Z" Then
Se invece vuoi p.e. escludere tutte le etichette
For Each ctl In Me.Controls
  If ctl.ControlType <> acLabel Then
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 


la split genera un array (vettore) in funzione del/dei caratteri 
indicati come saparatori.   Aggiungere "///" assicura che ci siano 
almeno tre elementi es.:
se tag e' vuoto : genera tre elementi vuoti (tag = "///")
se tag = "A" genera quattro elemeti  (tag = "A///")
se tag = "A/B"  genera 5 elemeni (Tag = "A/B///")
prima c'era una sola "/" e quindi se il tag aveva meno di due elementi 
veniva generato l'errore poiche' l'istruzione cercava il terzo elemento 
(indice (2)).
--
ac


Ciao Karl,
la form presenta 5 controlli (4 textbox e 1 un pulsante) tutti con i
tag X/Y/Z.
Se lascio,   If Split(ctl.Tag & "/", "/")(2) = "Z" mi resituisce
l'errore
invece
se metto, If Split(ctl.Tag & "///", "/")(2) = "Z" Then Funziona
Perchè? Grazie

 Perchč? Grazie
Funziona? Sei sicuro? Cioč viene soddisfatta la if? o semplicemente non 
ricevi piů l'errore
-- 
Ciao
Geppo 


Funziona. Non riceve piu' l'errore e viene soddisfatta la if.
se fosse "Z/Z/Z/" Allora si che ci sarebbe l'inghippo.
Osserva bene il codice.
--
ac

 Osserva bene il codice.
Si, hai ragione, l'ho avevi anche spiegato qualche post fa.
Ottimo. Grazie.
-- 
Ciao
Geppo 

bigcef ha scritto:

Ma perchè non fai i test con Instr invece di complicarti la vita?
  If Instr(ctl.Tag,"Z")>0 Then ....
Funziona sempre, con qualsiasi numero di caratteri nel Tag.
Se la lettera cercata non è nel Tag, Instr restituisce zero.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

On 24 Set, 08:31, 
marco.pizzamig...@gmail.com
 (Marco Pizzamiglio)
wrote:

Ciao Marco,
funziona perfettamente.
Mi interessava la soluzione di Alessandro e Karl anche da un punto di
vista teorico, o meglio per capirne il funzionamento.
Grazie Alessandro della spegazione.
Credo che questo post potrà interessare a molti, data la possibilità
di utilizzare i tag (1 ed ora anche più) dei controlli per eseguire
determinate operazioni.
Grazie e buona giornata