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.
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.
JTH makrója csak abban az egy esetben nem működik (vagyis de pedig nem kéne) ha a weblekérdezés eredményeként a figyelendő cella mégsem változik. Ez akkor történhet, ha az alkalmazott függvények olyanok, hogy két változás kiolthatja egymás hatását. Erről pilótakeksz nem nyilatkozott.
Viszont azt gondolom, hogy mivel változás nem marad ki, csak olyan false pozitívok kerülnek be, amiknek nem kellene, a makró jó.
Meglehet, de amit JTH megadott makrót, azzal is működik (kipróbáltam, csak a range-t vettem le egy cellára és az időt annak megfelelően, ahogy azt az importálás frissítési gyakoriságában beállítottam). Nagyon jó a dolog, érdemes kipróbálni.
"A valós lekérdezés a F oszloptól kezdődik, de ez lényegtelen."
Attól tartok, nem lényegtelen. Ide szerintem a Worksheet_Change vagy Workbook_SheetChange esemény kell, és figyelni kell, hogy hol történik változás a munkalapon. A képlet újraszámolása nem jelent változást, szóval az A2:C31 tartományt hiába figyeli a program. Amennyiben a lekérdezésben benne van az F2 cella, szerintem az alábbi kód jó lesz. A ThisWorkbook kódlapjára másold be.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim r As Range If (Sh.Name = "Munka3") And Not Intersect(Target, Sh.Range("F2")) Is Nothing Then Set r = Worksheets("Munka5").Range("A" & Rows.Count).End(xlUp).Offset(1) r.Resize(30) = Now Sh.Range("A2:C31").Copy
r.Offset(, 1).PasteSpecial xlPasteValues End If End Sub
valamit elcseszek : ne haragudj! Pontosítok amennyira csak tudok: legelőször pontatlan voltam.
-->munka3 a2:c31 - re érkezik a weblekérdezés, illetve a weblekérdezés által lehívott táblázat azon része, ami fügvények segítségével A B C oszlopokba lett szűrve a számomra hasznos tartalmuk. A valós lekérdezés a F oszloptól kezdődik, de ez lényegtelen. A lényeges infó az A B C oszlop. (amiben a sorok összetartoznak) és nem 10 sor hanem a legfelső változatlan címsor alatt 30 változó tartalmú sor áll. Tehát a címsort nem kell loggolni.
-->munka5 a2:..... -re szeretném a loggolást végrehajtani! (több ezer soron keresztül is loggolhat)
a munka5-re megyek, view code, és beleírom azt, amit írtál a Worksheet-be:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim LogRow As Integer If Target.Row < 32 And Target.Column < 4 Then
' az A2:C31 tartomány változott
LogRow = Sheet5.UsedRange.Rows.Count + 1
Sheet5.Cells(LogRow, 1).Value = Time
Sheet5.Cells(LogRow, 2).Value = Target.Address
Sheet5.Cells(LogRow, 3).Value = Target.Value
End If
End Sub
a Kódban mi mutat a munka3-ra? és rendben van ez így? mert nekem nem működik, azt írja ki, hogy "Can't execute Code in break Code."
Segítségedet előre is és utólag is köszönöm.
És bocs, ha az arcodat kaparod, amiért értetlenkedem. ÜDV!
A kihúzott részek egy korábbi koncepcióból maradtak bent, hagyd ki őket.
A Sheet1, Sheet2 a munkalapok kódnevére vonatkozik, értelemszerűen cserélni kell őket ha az adataid más füleken vannak.
Más: ha a weblekérdezést makro csinálja, akkor ezt abba is bele lehet integrálni.
Más2: ha a weblekérdezés eredményeképp egy egész range változik egybe (pld. A1:B20) akkor nem feltétlenül fog jól működni a lenti kód, mert a Value property-nek bekever ha a Target nem sima cella.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Range2Check As Range
Dim LogRow As Integer Set Range2Check = Range(Sheet1.Cells(1, 1), Sheet1.Cells(11, 2)) If Target.Row < 12 And Target.Column < 3 Then
ez igy nem igazan jo. mert nem masolni szeretnem az adatokat hanem naplozni loggolni. a munka1 lapon 2 oszlop 10 sor öt percenkent valtozik. a munka2 lapon minden valtozast elozmenyt rogziteni szeretnek. lehetoleg a rogzites idopontjat is C oszlopba.. ez keplettel nem megoldhato. vmilyen VBA macro kellene hozza. koszonom a valaszodat. ÜDV
Tud valaki segíteni nekem abban, milyen macrot kell írnom ahhoz, hogy az egy munkalapon weblekérdezéssel A, B oszlopába érkező 2 percenként változó, frissülő adatokat másik munkalap A és B oszlopába naplózza. esetleg a naplózás időtartamát kiírja.
Ha valaki segítene esetleg, tegye kérem szájbarágósan, mert új vagyok még a pályán.
Egy váltógombot tettem egy munkafüzetlapra, aminek hol a mérete nő meg a rákkantításkor, hol a megnevezése betűmérete csökken le parányira. Mi lehet szerintetek ennek a fura jelenségnek az oka?
Egyszerre több pivottábla jelentésszűrőjének állítgatásához kinek milyen ötlete van?
Pl.:
van 10 pivottábla (Összegyúrhatnám egybe az egészet sql oldalon, de nem szeretném - és nem is ez az igény)
a jelentésszűrőjükben 1-1 hónap, vagy év mezővel.
Nem akarja az user végiggyalogolni a 10 kimutatást, hogy azonosat állítson be mindegyiknél.
Elég sok pivotos újítással találkoztam a 2010-esben a 7-eshez képest. Nincs erre is valami frappáns szerintetek?
Tömör gyors makróval viszonylag egyszerűen meg tudom oldani (még nem tettem meg csak az elgondolás van meg), azonban arra vagyok kíváncsi, hogy van e erre beépített 2010-esben (még nem találtam, 3 és 7-ben szerintem nincs)
Egy talán egyszerű, de nekem kissé bonyolult feladat megoldásához szeretnék segítséget kérni.
Szóval az időt szeretném áttenni 10-es számrendszerbe, vagyis ha az az eredmény, hogy 2:30, vagyis 2 óra 30 perc, akkor az eredmény 2.50 legyen, tehát kettő és fél óra.