Newsgroup: it.comp.lang.visual-basic
Titolo: Confronto fra variabili vba e Celle Excel

Prima di Impazzire lo chiedo:
in una sub di vba ho un ciclo con un confronto tra una variabile
somma che ho inizializzato a zero (e dichiarato prima come Double) e
una cella di excel.
il confronto è
        Do While CDbl(somma) <= -Cells(riga, 7)
Cdbl è il mio ultimo tentativo per essere sicuro che siano
confrontabili, ma non ha avuto esito positivo.
Il problema è che con i valori di somma = 0 e di Cells(riga, 7) =0
[e quindi anche -Cells(riga, 7) è =0]  la simpatica sub non ferma il
ciclo! e va in loop.
Disperato ho aggiunto , per chiarezza, nella riga successiva al while
la seguente:
    If CDbl(somma) = CDbl(tentativonegativo) Then Exit Do
ma è come se non ci fosse:
Quello che voglio io è che le istruzioni nel while vengano eseguite
fino a che somma non diventa uguale o maggiore di Cells (riga,7), a
quel punto deve uscire dal ciclo while.
Quindi: ho impostato male la condizione oppure c'è un problema nella
dichiarazione della variabile oppure in quella della cella (ho fatto
eseguire un VarType sul cells e mi ha risposto che è Double (5)
Grazie millissime per il vostro aiuto

Prima di Impazzire lo chiedo:
in una sub di vba ho un ciclo con un confronto tra una variabile
somma che ho inizializzato a zero (e dichiarato prima come Double) e
una cella di excel.
il confronto è
        Do While CDbl(somma) <= -Cells(riga, 7)
****************************************************
Forse non ho capito, ma:
Public Sub m()
    Dim somma As Double
    somma = -5
    With Worksheets("Foglio1")
        Do While somma <= .Cells(1, 1).Value
            MsgBox "Ciclo: " & somma
            somma = somma + 1
        Loop
    End With
End Sub
Oppure:
Public Sub m()
    Dim somma As Double
    somma = 5
    With Worksheets("Foglio1")
        Do While somma >= .Cells(1, 1).Value
            MsgBox "Ciclo: " & somma
            somma = somma - 1
        Loop
    End With
End Sub
-- 
---------------------------
Mauro Gamberini
http://www.riolab.org/
 


Se c'è altro che non ho detto oppure l'ho spiegato male, non esitare.
Grazie

Credo che il problema sia nel confronto numerico.
Sai benissimo che VB usa internamente la notazione americana (il numero 
100,58 è visto internamente come 100.58).
Quando chiedi il contenuto di una cella con Cell(colonna, riga) 
probabilmente ti restituisce una stringa ("100,58").
Prova con
Do While CDbl(somma) <= -CDbl(Cells(riga, 7))
-- 
Ettore Massimo Albani 


wrote:

Fatto, non cambia niente e sono sempre desolato.
Grazie (la notazione americana mi era completamente sconosciuta!)

Per capire dove sta il problema ti suggerisco di inserire
debug.print CDbl(somma), -CDbl(Cells(riga, 7)), CDbl(somma) 
<= -CDbl(Cells(riga, 7))
immediatamente dopo il Do While
-- 
Ettore Massimo Albani 


wrote:

Sempre Grazie, l'ho copiato paro paro...cosa dovrebbe fare? non so che
risposta aspettarmi e comunque non succede niente.
Ci ho messo dei giorni per fare il programma, da bestia che ero, ha
sempre funzionato, ogni tanto un aggiustatina, ma che mi si impianti
perchè non vede che due numeri sono uguali mi fa imbufalire. Come
faccio a difendere excel e vba se non  riconosce che 2=2 ?
Qualcosa altro da poter fare? intanto mi informo sul Debug.print

Devi visualizzare la finestra di Debug!
Ctrl + G oppure menu Visualizza/Finestra Immediata
-- 

 --
GRAZIE GRAZIE!
Questo è il risultato della finestra immediata
 14434,36      14434,36     Vero
il primo valore è somma, il secondo -Cells(riga,7) e il terzo,
ATTENZIONE,
è l'esito di somma < -cells(riga, 7)
Una volta capito il finzionamento ho tolto l'= dal confronto,
quindi per qualche motivo se gli chiedo " 5 < 5 " lui risponde  "vero"
Esorcismo è forse la soluzione ultima?
Se devo inviarti tutto il codice fammi sapere come e dove.
Ancora Grazie

HO trovato questa discussione,
[Bug di VB] Condizione Do while con un Double Opzioni
e mi sembra che impostando le variabili come currency il problema si
risolva (certo, secondo me resta un grosso guaio generato da Vba, ma
per il mio caso che sono importi di denaro, due decimali - 4 - sono
più che sufficienti):
in ogni caso oggi pomeriggio modifico tutti le sub interessate, e poi
faccio le prove.
Per ora ringrazio tutti quelli che imi hanno aiutato, ho imparato
tanto anche in questa occasione.
ciao