Discussion:
Excel VBA (#ARG!)
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Lech Jaszowski
2009-05-12 09:44:00 UTC
Permalink
Witam,
Mam problem w rozpoznawaniu komórki z b³êdem #ARG!, który wynika z mno¿enia
liczby przez tekst (i tego nie mogê zmieniæ). Mam takie dane:

komórka P9 : 0
komórka P10: #ARG!
komórka P11: 0
komórka P12: #ARG!
komórka P13: 12
komórka P14: #ARG!
itp.

Program ma sprawdzaæ komórki od P9 w dó³ (do pierwszej pustej) i wy¶wietliæ
MsgBox w przypadku napotkania liczby ró¿nej od zera:

Sub ARG()
Range("P9").Select
Do While ActiveCell.Value <> ""
If IsNumeric(ActiveCell.Value) And ActiveCell <> 0 Then
MsgBox Prompt:="Tutaj mam co¶ do wykonania"
Exit Sub
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub

Przy komórce P10 wystêpuje b³±d 13 (Type Mismatch) w wierszu:
Do While ActiveCell.Value <> ""

Co jest tego przyczyn± i jak zmieniæ program, aby doszed³ do koñca bez
b³êdu?
Próbowa³em u¿yæ funkcji IsError oraz konstrukcji On Error GoTo etykieta, ale
bez skutku.

Leszek
Michal AKA Miki
2009-05-13 17:49:28 UTC
Permalink
Post by Lech Jaszowski
Witam,
Mam problem w rozpoznawaniu komórki z b³êdem #ARG!, który wynika z
komórka P9 : 0
komórka P10: #ARG!
komórka P11: 0
komórka P12: #ARG!
komórka P13: 12
komórka P14: #ARG!
itp.
Program ma sprawdzaæ komórki od P9 w dó³ (do pierwszej pustej) i
Sub ARG()
Range("P9").Select
Do While ActiveCell.Value <> ""
If IsNumeric(ActiveCell.Value) And ActiveCell <> 0 Then
MsgBox Prompt:="Tutaj mam co¶ do wykonania"
Exit Sub
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub
Do While ActiveCell.Value <> ""
Co jest tego przyczyn± i jak zmieniæ program, aby doszed³ do koñca bez
b³êdu?
Na moje oko przyczyna problemu jest sposob interpretacji Visual Basic'a.
Niestety nie mozesz postepowac w taki sposob:
If IsNumeric(ActiveCell.Value) And ActiveCell <> 0 Then

Czemu: poniewaz VB najpierw wyliczy wartosc obu argumentow, a potem dopiero
zrobi miedzy nimi "AND".
Niestety przy wyliczaniu drugiego parametru (ActiveCell <> 0) wywali blad...

Rozwiazaniem zastepczym jest zagniezdzona petla:
If IsNumeric(ActiveCell.Value) Then
If ActiveCell <> 0 Then
'tutaj costam wykonujesz
else
'przechodzisz dalej czy costam innego
end if
Else
'przechodzisz dalej czy costam
End if
Post by Lech Jaszowski
Próbowa³em u¿yæ funkcji IsError oraz konstrukcji On Error GoTo etykieta,
ale bez skutku.
bron boze :)

Pozdrawiam
Michal

Loading...