< návrat zpět

MS Excel


Téma: ako to mam napisat? rss

Zaslal/a 15.2.2011 19:18

Ahojte

chcem prejst oblast a ak sa v niektorej bunke nachadza chyba chcem nastavit hodnotu bunky na 0, zvladol by som to cez dva cykly For (riadok , stlpec, cells) ale rad by som pochopil aj to For Each

Sub Makro1()
Dim oblast
Dim bunka
oblast = Range("A3:BC7")

For Each bunka In oblast
If IsError(bunka) Then bunka = 0 'A tu mame chybu
End If
Next bunka

End Sub

dakujem

Zaslat odpověď >

#004107
Jeza.m
Ahoj,

momentálně si to nemůžu odzkoušet, ale řekl bych že tam jsou chyby 2 :-)

1) Když chyba = true nebo false znamená že je nebo není chyba. Takže bych řekl že tam chybí to = true.
2) Pokud je podmínka s procedurou při splnění na jednom řádku tak nenásleduje end if

Např.:
if a=1 then b=0
nebo
if a=1 then b=0 else b=1

end if musí být v případě:
if a=1 then
b=0
end if
toto se používá až když potřebuješ víc než jednu proceduru v případě splnění či nesplnění podmínky.

Takže by ten zápis měl vypadat asi takhle:

For Each bunka In oblast
If IsError(bunka)=true Then bunka = 0 'A tu uz snad nemame chybu
Next bunka


M@citovat
#004118
avatar
ahoj

tak mas pravdu ze som if zbytocne ukoncil ale to nebol hlavny moj problem
nemas pravdu ze IsError musim ukoncit = True , ak nechcem mat False tak True to bere automaticky -nemusis to tam pisat

tvoj kod bohuzial neriesi moj problem sice nehadze chybu ale nic nerobi

vyriesil som to
Sub Makro1()

For riadok = 3 To 7
For stlpec = 1 To 9
If IsError(Cells(riadok, stlpec)) Then
Cells(riadok, stlpec).Value = 0
End If
Next stlpec
Next riadok

End Sub

ale rad by som pochopil aj For Each

vie mi niekto pomoct? dakujemcitovat
#004119
Jeza.m
Jo nemusím mít vždycky pravdu 7 , tak pak už ale není chyba v For Each, ale v definici oblasti, tu je potřeba nastavit, anebo si vytovřit pojmenovanou oblast.

S nastavením to bude:
Sub Makro1()
Dim oblast As Range
Set oblast = List1.Range("A3:BC7")

For Each bunka In oblast
If IsError(bunka) = True Then bunka.Value = "0"
Next

End Sub


s použitím pojmenované oblasti to může vypadat takto:
Sub Makro1()

For Each bunka In Range("Nazev_Oblasti")
If IsError(bunka) = True Then bunka.Value = "0"
Next

End Sub


no a na závěr zjednodušený zápis bez deklarací a bez pojmenované oblasti:
Sub Makro1()

For Each bunka In Range("A3:BC7")
If IsError(bunka) = True Then bunka.Value = "0"
Next

End Sub

M@citovat
#004120
avatar
dakujem

sice nechapem preco mi to vcera vzdy vyhodilo chybu pri zapise bunka.Value , ale dnes to funguje a to je hlavne

PS. ide to aj bez toho True 7

este raz dikcitovat
#004122
Jeza.m
vcera tam chybělo to "set oblast"citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse