Koodipätkän tarkoitus on Excelissä etsiä yhdestä sarakkeesta solu kerrallaan tietyltä rangelta E kirjain. Solu, jossa E esiintyy, sisältää esim. "E/2000". Haun pitää pysähtyä nimenomaan ensimmäiseen soluun, josta E löydetään.
E:n etsintä on onnistuttu nauhoittamaan makrolla, kun E:tä sisältäviä soluja todella on annetulla alueella:
Selection.Find(what:="E", after:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _ .Activate
Sen sijaan, jos tuota E:tä ei ole alueella, tulee virhe 91: object variable or object with block variable not set.
Olen yrittänyt monellakin tavalla käydä soluja yksi kerrallaan läpi ja pysäyttää loopit, kun E löydetään. Esim. tämä painelee E:n ohi (ei jostain syystä huomaa sitä)
For Each Cell In alue If Cells(rivi, 1) = "E*" Then MsgBox "rivillä " & rivi Else rivi = rivi + 1 End If Next
Kuinka saan tuon edellä mainitun makron toimimaan if lauseen tapaan (jos ei löydy, tee sitä ja sitä) tai miten tuo yllä mainittu if lause pitäisi muokata, jotta looppi pysähtyisi E:tä sisältävään soluun?
Pitänee tutkia erikseen solun (tarkoittanee samaa kuin alkio?) jokainen merkki erikseen ja tarkistaa onko mikään niistä E.
Tai en minä tiedä, kun en ole Exceliä kokeillut, mutta Basicilta nuo lausekkeet näyttää. Käytä jotain Mid$:ia tai vastaavaa.
Laita ensi solun sisältö string muuttujaan ja tutki sitten sitä funktiolla if instr(sisältö,"E")>0 then exit for.
Sub Makro1() ' ' Makro1 Makro ' tnb on nauhoittanut makron 17.2.2004. ' Dim st As String For I = 1 To 100 st = Cells(I, 1) If InStr(st, "E") > 0 Then Exit For Next I ....... End Sub
Kiitos tnb!
Aihe on jo aika vanha, joten et voi enää vastata siihen.