Vitas rašė:
> Laba diena,
> Jau visus variantus i�m�ginau ir ne�inau kaip teisingai u�baigti paie�k�,
> kad nemest� klaidos "Run-time error 91: Object or variable with not set".
> Excelis 2000.
> Kodas toks:
>
> Dim c As Range
> With Sheets("Sheet1").Range("a1:a6")
> Set c = .Find("*5*", After:=Range("A1"), LookIn:=xlValues)
> If Not c Is Nothing Then
> FirstAddress = c.Address
> MsgBox FirstAddress
> Do
> c.Value = 4
> Set c = .FindNext(c)
> If c Is Nothing and c.Address<> FirstAddress Then Exit Do
> MsgBox c
> Loop ' While Not c Is Nothing ' And c.Address<> FirstAddress
> End If
> End With
>
>
Cha, gana geras pavyzdys, kaip _oficialus_ MS help'o pavyzdys
(klaidingas) neatsižvelgia į tai, kad VBA loginiai operatoriai yra
neoptimizuoti (ne short-circuit, ne lazy, McCarthy evaluation). T.y.
visada tikrinamos („apskaičiuojamos“ -- evaluation) visos loginių
operatorių grandinės sąlygos, net jei vienas kuris kairysis operatorius
ir nulemia visos grandinės loginį rezultatą ir dešinesnių būtų galima
nebetikrinti:
http://en.wikipedia.org/wiki/Short-circuit_evaluation
http://support.microsoft.com/kb/817250
Tad reikėtų perrašyti sąlygą į kažką panašaus:
....
If Not c Is Nothing Then
If c.Address = FirstAddress Then
Exit Do
End If
Else
Exit Do
End If
Loop
....