BUG VBA w Excel 2003

0 views
Skip to first unread message

Lelos

unread,
Jan 5, 2012, 9:18:22 AM1/5/12
to excelandia
Pozdrawiam z Nowym Rokiem

Sub BUGwExcel2003()
Deklarowano = 40: OpłObr4Młodszym = False
WarMyPktU = False: Wygrana = False
Remis = False: MyRozgrywamy = False
Przegrana = True: Punkty = 80
OpłObr4Młodszym = (Deklarowano = 80 And _
(WarMyPktU = True And (Wygrana Or Remis)) Or ((MyRozgrywamy = False)
And (Przegrana) _
And (Punkty > 0)))
End Sub

OpłObr4Młodszym powinno wyjść False bo Deklarowano jest różne od 80 -
a wychodzi TRue
Możecie to sprawdzić u siebie ?

Lelos

unread,
Jan 5, 2012, 9:25:29 AM1/5/12
to excelandia
tak wkleiło, że zgubiła się ciągłość instrukcji - myślę, że widać gdzie

cendro

unread,
Jan 5, 2012, 10:17:02 AM1/5/12
to excelandia
Cześć.

Żaden bug,
na zewnątrz zdanie logiczne wygląda tak:

FAŁSZ and PRAWDA or PRAWDA, gdzie:

pierwsze zdanie --> Deklarowano = 80 (pierwszy FAŁSZ)
drugie zdanie --> (WarMyPktU = True And (Wygrana Or Remis))
(pierwsza PRAWDA)
trzecie zdanie --> ((MyRozgrywamy = False) And (Przegrana) And
(Punkty > 0)) (druga PRAWDA)

Ponieważ AND ma pierwszeństwo przed OR ( tak jak mnożenie przed
dodawaniem) to ostatni warunek (za OR) decyduje o tym, że całe zdanie
jest PRAWDA.

Jeśli chcesz aby Deklarowano=80 decydowało o tym, że całe zdanie jest
fałszywe, powinieneś użyć dodatkowego nawiasu:

FAŁSZ and (PRAWDA or PRAWDA), czyli:

OpłObr4Młodszym = (Deklarowano = 80 And _
((WarMyPktU = True And (Wygrana Or Remis)) Or ((MyRozgrywamy = False)
And (Przegrana) _
And (Punkty > 0))))

Pozdrawiam

MC

Lelos

unread,
Jan 5, 2012, 11:59:59 AM1/5/12
to excelandia
Ja ja to sprawdzałem ?
Tyle razy liczyłem te nawiasy i wychodziło mi że się nie zamykają w
środku więc jest war1 and war2. Niestety liczyłem z tym pierwszym :-
(
Serdeczne dzięki za szybkie poratowanie :-).
Reply all
Reply to author
Forward
0 new messages