Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Ez például egy olyan kereső, ahol egyik mezőnek sincs se neve, se ID-je. De az egész kódban sem találtam egyetlen ID-t sem. Itt csak úgy tudom elképzelni az azonosítást, hogy:
For Each mező In Document.ÖsszesMező
If mező.nodename = ami nekem kell, pl. "Input" Then
If mező.defaultvalue = ami nekem kell, pl. "Veszprém" Then
ismerős projekt, egyik városban születtem, másikban iskolába jártam. legrövidebb út, NAgykőrös, Abony, Heves érintésével valóban 287km, de ma már érdemesebb az M6 és M3 pályákon haladni, de az M0 nagy kerülő, érdemesebb átzúgni Pesten, persze nem csúcsforgalomban. Utóbbi lehet Jimmy útvonal javaslata is.
Ezután már senkinek nem hiszek el semmit. A linkeden megkérdeztem a Baja - Miskolc távolságot, oda, és vissza is 287 km. A Jimmy által idézett térképen ez 368, ill. 369 km. :(
Nos, mielőtt kérdeztem nekem is ez volt az első - bár nem firefox, hanem opera böngészőt használok cca. 15 éve és abban is van hasonló (beépített) funkció. De nem találtam a mezőkre vonatkozó kódrészt.
Szívesen. Csak azt tartsd szem előtt, hogy a kód teljesen weblap-specifikus. Vagyis: semelyik másik útvonaltervezővel nem fog működni. (És ezzel is csak addig, amíg valaki újra nem tervezi az oldalt.)
Van Firefox-hoz egy FireBug nevű kiegészítő. Ezt ha bekapcsolom, kiadja az éppen nézegetett weblap teljes forráskódját. Amikor az egérkurzort a kód sorai fölött mozgatom, kiemeli a weblapon azt a részt, amire az aktuális sor vonatkozik. Így némi keresgélés után be lehet azonosítani azt a mezőt, amire kíváncsi vagyok. Jó esetben van neki ID-je és/vagy neve.
Gond akkor van, ha a egyik sincs, ugyanis ezek alapján lehetne egyszerűen hivatkozni rájuk. A lenti útvonaltervező esetében pl. a "honnan" és "hová" mezők, illetve az "útvonaltervezés" gomb egyikének sincs sem ID-je, sem neve. De a fölöttük egy szinttel lévő "gyűjtőobjektumnak" (nem tudom, mi a szakkifejezés) van ID-je, így arra lehet hivatkozni, és aztán a .Children(x) property-vel lehet hivatkozni magukra a mezőkre is. Csak meg kell számolni, hogy hányadik Child-ről van szó (nullával kezdődik az indexelés).
Ezekre mind ma jöttem rá...
És a végén kb. egy órámba telt, mire ezt a 3 sort kiizzadtam:
While oSum.innerText = "" DoEvents Wend
Ugyanis az oSum.Innertext értéke mindig üres sztring volt, amikor a program futása odaért, de mikor törésponttal megállítottam a futást, mindig a távolságértéket láttam. Gondoltam, biztos idő kell neki. Beraktam a kódba egy várakozó ciklust, de az sem segített, az IE objektum ready állapotát is hiába figyeltem... Míg végül eszembe jutott a fenti (egyébként kézenfekvő) megoldás.
Ebből az egészből nekem az jött le, hogy a javascript-ek végrehajtását az IE nem jelzi vissza, csak a mezőértékekből lehet rá következtetni, hogy elkészült-e vagy sem.
És akkor még nem is számoltál a keleti hátszéllel, amitől gyorsabban mész Bajára, és a nagyobb sebesség miatt jobban görbül a tér körülötted. Szerintem ez lehet a különbség oka. Vagy a félpályás terelés az M6-oson a délelőtti dunaújvárosi bicikliverseny miatt. :)
Lefuttattam a fenomenális makródat, és képzeld, a Baja - Miskolc távolság 369 km (körülbelül 3 óra 48 perc), a Miskolc - Baja viszont 368 km (körülbelül 3 óra 45 perc). :))
Egyszer 100 éve egy térképen kikrestem két helység távolságát. 41 km-t írt. Utána megnéztem egy frissebb térképen, ott 42 km volt, a legfrissebben pedig 43 km. Szépen példázza a táguló világot. :)
Ezzel elküzdöttem egy darabig, de szerintem elég jól sikerült. Igaz, nem google-t használ...
B1-be kell beírni a kiindulópontot, B2-be a célállomást, aztán futtatni a makrót, és B3-ba jön (elvileg) az eredmény.
A makró a lekérdezés során megnyitja az Internet Explorert. Az IE ablak felugrását el lehetne kerülni a piros sor törlésével vagy kikommentezésével. Elegánsabb lenne úgy. De az a gond, hogy ha a webhely hibaüzenettel tér vissza, )pl. nemlétező városnév esetén,) akkor a makró nem tudja bezárni az IE ablakot, és mivel az ablak nem látszik, nem tudod bezárni manuálisan sem, csak feladatkezelőből.
Sub DistanceQuery() Dim IE As Object, Doc As Object Dim oFr As Object, oTo As Object, oBut As Object, oSum As Object 'HTMLTableCell Dim t As Long, s As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate "http://www.terkep24.hu/" IE.Visible = True While (IE.Busy) Or (IE.ReadyState <> 4) 'wait until ready Wend Set Doc = IE.Document Set oFr = Doc.getelementbyid("rpA").Children(1) Set oTo = Doc.getelementbyid("rpB").Children(1) Set oBut = Doc.getelementbyid("routebtn_terv").FirstChild
oFr.Value = Range("B1") oTo.Value = Range("B2") oBut.Click While (IE.Busy) Or (IE.ReadyState <> 4) 'wait until ready Wend Set oSum = Doc.getelementbyid("summary") While oSum.innerText = "" DoEvents Wend s = oSum.innerText s = Replace(s, Chr(13), "") s = Replace(s, Chr(10), "") t = InStr(s, ":") s = Mid(s, t + 1) Range("B3") = s IE.Quit End Sub