Newsgroup: it.comp.lang.visual-basic
Titolo: end if in ciclo

Sto estraendo dei dati da un file txt delimitato.
poi popolo un listbox(list1)  ed straggo dei dati per riempire dei
moduli input in un webbrowser.
questi form possono avere uno o due campi
il valore(6) del datarray è un campo input extra che non è sempre
presente nel sito.
così ho pensato di dare un valore al campo(6) "#test" e di fare un end
if per vedere se sia necessario usare l'attributo "
campo1.setAttribute "value", "xxxxxx"" che riempe il modulo input.
Al momento però anche se il dataarray(6)  ha valore "#test" mi ritorna
un erore:
"TIPO NON CORRISPONDENTE"
di seguito il codice.
Dim campo1
Do Until browser.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
Set campo1 = d.getElementsByName(DataArray(List1.ListIndex)(6)).Item(0)
    If Not campo1 = "#test" Then
   campo1.setAttribute "value", "xxxxxx"
End If

 End If
Poiche hai dichiarato campo1 come Variant, puo` esserci
dentro di tutto, quindi e` cosa buona e giusta verificare
che cosa ci sia andato a finire.
Parole chiavi utili sono: 
Typeof, Typename, IsObject, IsNull, IsEmpty, Is
Hai fatto il test sul tipo di dato contenuto in campo1?
-- 
ciao, hal

Dim campo1
Do Until browser.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
Set campo1 = d.getElementsByName(DataArray(List1.ListIndex)(6)).Item(0)
If IsNull(campo1) = True Then
Else
campo1.setAttribute "value", "xxxxxxx"
End If
in questo modo mi ritorno un errore quando il campo1 è nullo
"INDICE NON COMRPESO NELL'INTERVALLO"
io credo che il probelama sia qui:
Set campo1 = d.getElementsByName(DataArray(List1.ListIndex)(6)).Item(0)
perchè il ciclo cerca un valore che non cè
quindi dovrei fare un controllo per verificare che in quel
"Listindex(6)" il valore sia nullo o presente.
fammi sapere.
Grazie.

 fammi sapere.
prima di partire in picchiata sull'elemento di indice n e` sempre
opportuno verificare prima di tutto se vi siano elementi.
l'insieme da cui recuperi gli elementi dispone di qualche proprieta`
Count o Length o Size o giu` di li`?
Oppure, se trattasi brutalmente di un array visual basic, esiste la
funzione UBound che ti ritorna l'indice dell'ultimo elemento.
Attenzione che se l'array e` vuoto allora UBound solleva un'eccezione
che va intercettata senza propagarla al resto dell'applicazione; puo`
essere comoda una funzione apposita per questo test. Una versione
semplificata potrebbe essere piu` o meno cosi`:
Public Function SafeUBound(ByRef theArray As Variant) As Long
    On Local Error Resume Next
    SafeUBound = UBound(theArray)
    If (Err.Number) Then
        Err.Clear
        ' ritorna un valore che per noi e` considerato non valido
	' puo` essere -1 come qualsiasi altra cosa
        SafeUbound = -1
    End If
End Function
-- 
ciao, hal

ma posso utilizzarla in questo modo?
Public Function SafeUBound(ByRef theArray As Variant) As Long
    On Local Error Resume Next
    SafeUBound = UBound(theArray)
    If (Err.Number) Then
        Err.Clear
        ' ritorna un valore che per noi e` considerato non valido
        ' puo` essere -1 come qualsiasi altra cosa
        SafeUbound = -1
    End If
End Function
Dim campo1
Do Until browser.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
if  not SafeUbound = -1 then
Set campo1 = d.getElementsByName(DataArray(List1.ListIndex)(6)).Item(0)
campo1.setAttribute "value", "xxxxxxx"
end if