Tema: Re: Prasau pagalbos del FIND method in excel vb...
Autorius: Laimis
Data: 2010-04-28 11:03:42
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
....