Newsgroup: it.comp.appl.access
Titolo: IF dentro ciclo For ?????

Ho una ListBox Multiselect da cui sciegliere più valori.
Il ciclo For Each con il seguente codice funziona alla perfezione
Private Sub Comando81_Click()
Dim VociElenco As Variant
Set ctl = Me.ListBox1
     	For Each VociElenco In ctl.ItemsSelected
  		  Debug.Print ctl.ItemData(VociElenco)
     	Next VociElenco
End sub
A questo punto però ho bisogno di sapere il valore di column(1) della
listBox
E poi ho bisogno che le condiziioni (IF) facciano qualcosa a seconda
del valore di column(1) selezionato:
Ad Esempio,nella ListaBox1 ho i seguenti valori:
 Colonna0 Colonna1
  “Rossi” "D1"
  “Bianchi” "D2"
  “De Marco” "D3"
  “Cabrini” "D4"
 
Il problema nel seguente codice è che viene presa in
considerazione solo una condizione e non tante quante sono
le selezioni del Multiselect!
Private Sub Comando81_Click()
Dim Risultato as integer
Dim VociElenco As Variant
Set ctl = Me.ListBox1
 
For Each VociElenco In ctl.ItemsSelected
 
                     If ctl.Column(1) = "d1" Then
      			Risultato = 1
  	ElseIf ctl.Column(1) = "d2" Then
    			Risultato = 2
  	 ElseIf ctl.Column(1) = "d3" Then
  			 Risultato = 3
   	ElseIf ctl.Column(1) = "d4" Then
  			Risultato = 4
   	ElseIf ctl.Column(1) = "d5" Then
   			Risultato = 5
   	 End If
          Debug.Print ctl.ItemData(VociElenco)
    Next VociElenco
End Sub
 'PERCHE' Dopo NEXT non legge che ctl.column (1) è CAMBIATA?
'Come si fa a far funzionare IF o SELCT CASE dentro un ciclo For ?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:87Z10Z99Z22Y11...@usenet.libero.it...

se vuoi usare SELECT CASE puoi trasformare il tuo codice così :
 Private Sub Comando81_Click()
 Dim Risultato as integer
 Dim VociElenco As Variant
 Set ctl = Me.ListBox1
For Each VociElenco In ctl.ItemsSelected
 SELECT CASE ctl.Column(1)
        CASE "d1" : Risultato = 1
        CASE "d2" : Risultato = 2
        CASE "d3" : Risultato = 3
        CASE "d4" : Risultato = 4
        CASE "d5" : Risultato = 5
 END SELECT
         Debug.Print ctl.ItemData(VociElenco)
 Next VociElenco
End Sub
la prima domanda non l'ho capita (!!) ... usi le colonne sapendo che sono 
numerate da 0 vero? Nell'interfaccia si definisce la colonna 1 come la 
prima, ma nel codice la prima colonna è la ZERO, e questo a volte crea delle 
confusioni.
nel tuo caso specifico potresti abbreviare il tutto con un 'trucco' (o 
semplificazione, in termini di istruzioni).
Se il Risultato 'è sempre' uguale alla cifra di Column(1) allora potresti 
scrivere :
............
Risultato = Mid(ctl.Column(1),2)
............
ed elimini tutto da  Select Case .. a  End Select
IvanDaBologna

 ha scritto nel messaggio 
news:87Z10Z99Z22Y11...@usenet.libero.it...

rileggendo il 3D credo di aver intuito (:\) il problema.
Tu istanzi una collezione VociElenco e poi però non la usi nel codice 
successivo, continui a riferirti a CTL.ITEMSELECTED !
Probabilmente (anzi sicuramente) questo non ti scandisce l'elenco ma punta 
sempre  e solo al primo elemento di un elenco preciso : gli ItemSelected 
della tua casella a discesa.
-- 
... spero di esserti stato d'aiuto,
       \|/\|/\|/
       (@ @)
---o00-(_)-00o----- Ivan

 ha
scritto:

cut
ESATTO: punta sempre al primo elemento.
Immagino gli Item selected di ctl, come fossero un recordset: al momento in
cui indico
di spostarsi alla voce successiva (MoveNext) , mi aspetto che anche IF legga
la nuova
voce ed esegua la nuova condizione. Ma non è così!
Dici che non devo riferirmi sempre a Ctl.ItemSelected.
E a chi devo rivolgermi! A San Gennaro? :-)))
Scherzi a parte mi pare che solo ctl abbia la proprietà Column(1)
Ciao grazie.


 ha scritto nel messaggio
news:87Z10Z99Z22Y11...@usenet.libero.it...

perchè ctl.column (1) è riferito all'item selezionato e non a quello
indirizzato da  Vocielenco.
per leggere la colonna relativa a Vocielenco fai così
----
For Each VociElenco In ctl.ItemsSelected
  If ctl.Column(1,Vocielenco) = "d1" Then
      Risultato = 1
  ElseIf ctl.Column(1,Vocielenco) = "d2" Then
    Risultato = 2
  ElseIf ctl.Column(1,Vocielenco) = "d3" Then
  Risultato = 3
   ElseIf ctl.Column(1,Vocielenco) = "d4" Then
  Risultato = 4
   ElseIf ctl.Column(1,Vocielenco) = "d5" Then
   Risultato = 5
   End If
   Debug.Print ctl.ItemData(VociElenco)
   Debug.Print ctl.ItemData(1,VociElenco)
 Next VociElenco
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

    Debug.Print ctl.ItemData(1,VociElenco)
----
va scritta cosě
----
Debug.Print ctl.Column(1, VociElenco)


 ha scritto nel 
messaggio news:44c3469b$0$1000$5fc...@news.tiscali.it...

scusa Giorgio, ma non si puň ciclare sugli ItemSelected come se fossero 
elementi della CasellaAdiscesa ?
qualcosa del tipo
Risultato = VociElenco.Column(1)
... ??
altrimenti nella maniera che voleva tenere lui, non ha senso istanziare 
VociElenco ... o no ?!
'ciao

 VociElenco ... o no ?!
ha senso eccome :-)
Ho l'impressione che non avete capito cosa sia VociElenco  :-)
VociElenco č un array o come preferisci un insieme di tipo Long (itero
lungo)  in cui sono contenuti i numeri delle righe selezionate.
Per capire meglio, metti nel loop l'istruzione
-----
Debug.Print VociElenco
-----
Forse cosě č piů chiaro.



orca !
è verissimo.
Per un'attimo(moolto lungo), ho pensato che potesse essere l'insieme delle 
sole righe selezionate con tutte le loro proprietà !! ;)
grz per il chiarimento ...
IvanDaBologna

 [Office Access MVP]
Perfetto!!!! La soluzione al mio problema è stata trovata.
(Anche se io pensavo che la proprietà Column prevedesse un numero di riga ,
dopo il numero colonna…Non sapevo che si potesse mettere un argomento…
studierò meglio)....
A proposito di ListBox e Recordset
In un 3D di qualche settimana fa, qualcuno mi ha suggerito la proprietà
Recordset di
ListBox. (ListBox.Recordset…Sarebbe comoda!!!)
Io uso Access2000 ed ho caricato entrambe le librerie DAO e ADO
Ma questa proprietà… non funziona. Esiste o non esiste?
Se esiste quale potrebbe essere la ragione per cui non funziona?
Grazie ad entrambi per le risposte del precedente 3D


 Grazie ad entrambi per le risposte del precedente 3D
Prego :-)



anch'io : prego ... di poter capire tutte queste cose un giorno!
;))
IvanDaBologna