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.
Ha legalább annyi teljesül, hogy minden fájl nevében benne van a kód, és minden fájl ugyanabban a mappában van, akkor már meg lehet spórolni a manuális felvitelt.
A1-re kihegyezve valami ilyesmi lehet:
Private Sub Worksheet_Change(ByVal Target As Range) Dim FN As String, myPath As String, ext As String Dim wa As Object
If Target.Address <> "$A$1" Then Exit Sub myPath = "C:\itt_vannak_a_fájlok_mappa\" FN = Dir(myPath & "*" & Range("A1").Value & "*.*", vbNormal) If FN = "" Then Exit Sub ext = Mid(FN, InStrRev(FN, ".")+1) If ext = "doc" Then Set wa = CreateObject("word.Application") wa.documents.Open myPath & FN wa.Visible = True ElseIf ext = "xls" Then Workbooks.Open myPath & FN End If End Sub
Köszi a választ ! Az az igazság, hogy egyöntetű algoritmust nem lehet ráhúzni a file-okra, hogy értsd, ezek szövetek amiknek van egy kódjuk, de a file neve sokszor ilyen: 935 445 szines bőr jobbos.doc vagy 887 445 szürke anyag.doc. Olyan megoldásra gondolotam mint a HA függvénynél, hogy ha 958 444 van a kódban, akkor nyissa meg a xycvb.doc-ot. Ezt nyilván manuálisan egyszer fel kellene vinnem, hogy melyik kód alapján mit nyisson meg.
egy hivatkozást szeretnék - függvénnyel - mellyel egy másik munkafüzet adott oszlopának mindenkori utolsó cellaértékét tudom beilleszteni úgy, hogy az értékek nincsenek sorba rendezve.
ha jól tudom akkor a "hol.van" és "cím" függvényekre van szükség....
Próbáld ki ezt. Feltételeztem, hogy a B oszlopban vannak az alma, cékla, banán, stb., szóval amivel beazonosítható a nemtudommi, továbbá a C oszlopban van nemtudomminek a nemtudommije, amit figyelni kell. Sajnos e tekintetben eléggé ellentmondásos információk jöttek eddig. Az alapötlet pedig az eddigiektől eltérően az, hogy a már naplózott banánok közül keresem ki az utolsó banánt, és ha ahhoz képest van eltérés, akkor naplózom megint. Így nem kell temp munkalap.
Private Sub Worksheet_Change(ByVal Target As Range) Dim wsLog As Worksheet, rLog As Range Dim rQuery As Range, c As Range, Hit As Range
Set wsLog = Worksheets("Munka5") Set rQuery = Range("B1", Range("B" & Rows.Count).End(xlUp)) For Each c In rQuery Set rLog = wsLog.Range("B" & Rows.Count).End(xlUp).Offset(1) Set Hit = wsLog.Range("B:B").Find(what:=c.Value, after:=rLog, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious) If Hit Is Nothing Then rLog.Offset(, -1).Resize(, 3).Value = c.Offset(, -1).Resize(, 3).Value rLog.Offset(, 2) = Now ElseIf Hit.Offset(, 1) <> c.Offset(, 1) Then rLog.Offset(, -1).Resize(, 3).Value = c.Offset(, -1).Resize(, 3).Value rLog.Offset(, 2) = Now End If Next End Sub
weblapról szépen elérem a kérdéses oldalt, viszont vagy nem találom a kis nyilat mellyel kijelölhetem az adatokat, vagy az adatokat kijelölöm majd pedig importálom - viszont hiányosan jelennek meg a munkafüzetben. Körbenéztem a különböző fórumokon, de sajna sehol sem találtam megoldást. Elképzelhető hogy ezt a fajta dolgot nem tudja kezelni az excel...
árfolyamokra lenne szükségem, amit a táblázat megnyitása után azonnal tudok - mármint az értékeket - frissiteni.
A problémát igazából az jelentheti, hogy ugyanazon internetes oldalcimhez több megjeleníthető adathalmaz (flash?) tartozik.
biztos érthetetlenül fogalamztam, elnézést érte. Ha valaki találkozott hasonló szituval kérem adjon tanácsot.
a B oszlopban csak akkor van alma nevű elem, ha a weblekérdezés ad alma nevű elemet, amúgy nincs.
leegyszerűsítené a dolgot, ha mondjuk ÉN DIREKT egy feltételhez kötném, mit LOGGOLJON????
például ilyesmi: a munka3 worksheetben , ha az adott sor "C" oszlopban lenne egy "L" karakter, akkor loggolja a sor 3 értékét? (időkijelzéssel) a munka5-re.
Nem. Kicsit elbeszélünk egymás mellett, ha jól hallom :-)
A B oszlop sorai mindíg azonosak (pld. ha a weblekérdezés nem ad eredményt az alma nevű elemre, attól függetlenül a B oszlopban lesz alma nevű elem (és mindíg pld. a második) vagy a B oszlopban csak akkor lesz alma nevű elem, ha a weblekérdezés rész ad alma nevű elemet)?
A weblekérdezés sorrendjét értem, én a figyelendő (logolandó) tartomány sorrendjét kérdeztem (A oszlop és társai?). Az ottani tételek sorrendje fix vagy az is változik aszerint, hogy mi jön le a weblekérdezésben?
a weblekérdezés abc sorrendben jön.. ez kicsit gáz, mivel (alma banán cékla) esetében a cékla 3. helyen áll következő frissítéskor akár második helyen is állhat (alma cékla görögdinnye) ---a banán kiesik, a görögdinnye bejön
az új érték mindig az ABC szerint szúródik be a sorok közé, és a weblekérdezés üres tartománya pedig törlődik (a banán sora teljes egészében)... Az összehasonlító megoldásban ennek nem lenne túl nagy jelentősége, vagy mégis??
-hogy kell "kinyomni a figyelendő tartományt" egy temp worksheet-be? mármint hogy temp legyen.. valódi elözmény legyen.
-hogy kell összehasonlítani így a tempben lévő értékeket az újonnan beérkezett értékekkel
-és az eltéréseket hogyan kell kiiratnom a munka5-re. :)
hát ezeket nem tudom. :)
de ha már megvan..
-azután már tudom szűrni, listázni, formálni, alakítni, "függvényelni", hogy statisztika lehessenek belőle.
-az egész munkafüzetben szereplő cellák nem csak kizárólag a weblekérdezések értékeit illetve annak számított eredményeit tartalmazzák.
-érdemes lenne a munka3 worksheet-re kitalálni vmit, ne pedig workbook-ra, mert a többi munkafüzet is változik, és azoknak a változásíit nem szeretném loggolni.
Hát, akkor itt az a megoldás, hogy a figyelendő tartomány (NEM a weblekérdezéses területet) értékét ki kell nyomni egy átmeneti worksheet-re és minden weblekérdezés után ellenőrizni kell, hogy a figyelendő tartomány új értéke megegyezik-e az ideiglenes worksheet-en lévő adatokkal. Ha nem, akkor kell logolni.
Felteszem a figyelendő tartományban az adatok sorrendje nem változik (csak azért kérdem, mert most van amikor "alma, cékla, répa", máskor meg "banán, cékla, paradicsom".
köszönöm a code-ot, és egyet értek a tapasztalatoddal.
ez így müködik, de nem jól.
a weblekérdezés nem publikus. egy olyan táblázat, aminek az oszlopszámai változatlanok, a sorainak száma változik 0-30 között, most perpillanat 5 sor. Sohasem több mint 30 sor. Betettem az "F" cellára.
A KÓD-dal az a baj, maga a WEBLEKÉRDEZÉST gondolja változásnak, így ugyanarról ugyanarra, vagy semmiről semmire történő cellaváltozást is loggol.
Eredmény:, hogy a munka5-ön öt sorban van adat, aztán alatta 25 sorban nincs, aztán két perc múlva azalatt megint lesz öt sor, (ami ugyanaz az adat, mint a legelsö ötösnél)
A weblekérdezés kétpercenkénti, de ez csak a REALtime (hatás) figyelés miatt van, valódi változás az adatokban ritkán van ( óránként), tehát két percenként ne loggolja ugyanazt lehetöleg. :) itt SQLkerdesnek nek igaza van. az a baj, hogy nem történik valós változás. ha kétpercenként történne, akkor ez a kód lenne a legjobb a világon.
HOgy kellene megcsinálnom ezt a TEMP összehasonlítós megoldást?, nem akarom bonyolítani a dolgot, valami alapmegoldás is jó lenne, nem kell nekem tökéletes, viszont IDŐ-kijelzése fontos lenne.
!!Példa!! 3-4 értékkel csak hogy érthető legyen (sorry az adatok bizalmasak, ezért helyettesítem ezekkel):
Sziasztok ! Egy relatív egyszerű dologban szeretném a segítségeteket kérni. Van egy excel táblázatom, amit nyomtatok, rengeteg pédányban minden nap. A lényeg, hogy van 15 könyvtáram kb 300 file-al, amik összefüggésben vannak ezzel a táblázattal.
Az egyik cellába egy kódot írok, pl 935848, ez alapján megkeresem a könyvtárakban ugyanezt a word-ot, ecelt ( a neve nem teljesen ugyanez ) és azt is kinyomtatom módosított adatokkal. Hiperhivatkozással, if fügvénnyel vagy valahogyan meg lehet oldani, hogy ha pl A1=935848 akkor nyissa meg nekem automatikusan a C:X935848abcd.doc file-t ?
nem tudom milyen adatok kérdeznél le és honnan így, de egy olyan helyen ahol 2 percenként frissülő adatok vannak, szolgáltatják az oldalon belül azok logolását is. (pl. árfolyamadatok, tőzsdei kereskedelmi adatok stb...)
Teszteletem egy saját weblekérdezésseel, és azt tapasztaltam, hogy amikor a lekérdezés frissül, a Worksheet_Change eseményben a Target a teljes tartománnyal lesz egyenlő. Ha tehát pl. egy weblekérdezés normál esetben az A1:T110 tartományt foglalja el, frissítéskor Target = A1:T110 lesz. Mindez független attól, hogy ténylegesen van-e változás a webről lehívott értékekben.
Ez azonban szerintem teljesen konzekvens működés, mert a Worksheet_Change ugyanígy működik sima cellamódosításnál is. Ha ugyanis pl. A1-ben eredetileg 1 van, és rálépsz A1-re, lenyomod az 1-est és ENTER-t, akkor tulajdonképpen a cella értéke nem változott meg, hiszen előtte is, utána is 1 az értéke, a Worksheet_Change mégis lefut. Az értékek tényleges megváltozását úgy lehetne esetleg nyomon követni, hogy a teljes lekérdezés tartalmát (az értékeket) lementeni egy temp munkalapra, és frissítés után azzal hasonlítani össze az új értékeket.