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.
Mielőtt átmásolod az oszlopot, az eredeti (F) oszlop tartalmát alakítsd át =F$3+$A4 stílisra (minden sorban, kivéve természetesen az első adatot (16:00)).
Megcsináltam hogy az egyik oszlop a menetidőket számolva kijön az alábbi képlettel:
=F$3+A4
A oszlop F oszlop
Moszkva tér 16:00
0:02 Városmajor 16:02
0:05 Budagyöngye 16:05 stb
Viszont ha egy 16:15-ös indulást vennék fel akkor nem másolja oldalra a számokat mindig érték hibát kapok, mert valahogy a megállót akarja hozzárendelni az értékhez amit nem értelmez. Hogy tudom odébbvarázsolni valahogy hogy mindig az A oszlop értékével számoljon?
Nem változtattam semmit, csak az event-et Calculate-ra (-re?).
Közben rájöttem, hogy nem kell volatile függvény, mert a figyelendő terület egyébként is függvény, szóval minden frissítéskor újraszámolódik és izgatja a Calculate event-et.
Private Sub Worksheet_Calculate() 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
Egyszerűbb lenne, kivéve úgy, hogy az az L betű függvény eredménye. Mert akkor megint ott vagyunk, hogy mitől lesz automatikus. Az általad leírt viselkedés a SelectionChange eseményre hajaz. Biztos, hogy a kódot a weblekérdezést tartalmazó munkalap kódlapjára tetted be, és nem módosítottad? Merthogy működnie kellene...
Nincs kedved átküldeni a táblázatot email-ben?
válaszok:
-az "L" karakter sajnos logikai fügvény eredménye
-gőzöm sincs mitől lehetne automatikus.. nem tudom van e olyan parancs, ami a kódba írva arra adna utasítást, hogy az újrainduljon, újrafusson weblekérdezés esetén, vagy időzítve kétpercenként, vagy ilyesmi.
-Igen igen, a kódot a munka3 worksheetre tettem, amire az adatok befutnak. Ezért működik, ahogy működik.
-Módosítottam: a kódban egy értéket átneveztem (B1-ről B2-re), hogy a fejlécet ne loggolja, ez tuti irreleváns. :)
Ja, és ehhez mindig "xxx xxx" formátumban írd be, mert azt keresi először, aztán ha nincs ilyen fájl, akkor kiveszi belőle a szóközt, és újra keresi szóköz nélkül.
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
End If 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
ha a file név elején van xxx xxx akkor megnyitja, így is xxx xxx és xxxxxx is. Ha a file név végén van pl abcdefg xxxxxx.doc és így írom be xxxxxx akkor megnyitja, ha xxx xxx akkor nem.
Jimmy kérlek segíts rajtam még egy apróságban :) Vannak olyan file-ok amelyek így néznek ki 940 084 box abcdefg.doc és vannak olyanok amelyek így: Box abcdefg 940084.doc, tehát a kódban van egy szóköz. Erre van megoldás, vagy az összes file-t nevezgessem át szóköz nélkülire ? Ugyanis amikor beírja a user a táblázatba a kódot, nem tudja hogy szóközzel van anélkül van-e mentve a doksi. Viszont a táblázatban szóközzel szokták írni, amikor kinyomtatják :D
Tehát lehet olyat csinálni, hogy ha szóközzel írja be a kódot a táblázatba xxx xxx akkor azokban is keressen amelyeknek ilyen a formátuma ? xxxxxx
Egyszerűbb lenne, kivéve úgy, hogy az az L betű függvény eredménye. Mert akkor megint ott vagyunk, hogy mitől lesz automatikus. Az általad leírt viselkedés a SelectionChange eseményre hajaz. Biztos, hogy a kódot a weblekérdezést tartalmazó munkalap kódlapjára tetted be, és nem módosítottad? Merthogy működnie kellene...
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
MOST csak akkor loggol, ha "rákényszerítem", úgyértem, ha rámegyek a munka3-ra majd a munka5-re váltok, akkor azt az állapotot loggolja, de ha elmegyek a városba dolgomat intézni, és nem váltogatom a lapokat oda-vissza, akkor a munka3 ezen kódja "nem dolgozik" nem loggol automatikusan, csakis a váltásnál.(pedig a munkafüzet mindig aktív és online)
Jimmy The Hand: minden eddigitől elvonatkoztatva: nem lenne egyszerübb, ha az egész loggolásnak EGYETLEN feltétel szerint kellene történnie?? semmi összehasonlítgatás meg efféle. CSAK annyi, hogy a weblekérdezéses munka3 nevű lapon, ha a "D" oszlop valamely cellájában a kód találna egy "L" karaktert, akkor csak az adott sor A, B, C oszlopában szereplő értéket (számított értéket!) loggolja csak (idővel együtt).
mert én azt az "L" karaktert logikai fügvényekkel el tudom helyezni a "D" oszlopba.
Köszönöm :) A helyzet, hogy ez egy elég aljas excel tábla. Nyomtatási területet, vonalkód címkét készítő makró is van benne, ennek a végére tettem be egy 3-as modulba, csináltam egy TESZT nevű könyvtárat néhány doksival, de valamit elronthatok, mert nem nagyon akar működni. :(
Ötletem éppenséggel volt, de nem tudtam megvalósítani.
Szóval azt próbáltam, hogy makróval indítani az internet explorert, és elküldeni a megadott oldalra, aztán ott lekérdezni az oldalról egy adott objektum értékét. Az objektum nevét ugye az oldalforrásból lehet megállapítani. Hát itt elakadtam. Nem értek a javascripthez, de html-hez se nagyon, és nem tudom, hogy hogyan vannak ezek az értékek megjelenítve.
A nevüket sem találom. Olyat találtam, hogy
<span id="ertek_nyito"> </span>
meg
<span id="hozam_idoszak"> </span>
meg hasonlók, de az
Set object = ie.Document.getElementsByName("hozam_idoszak")
végrehajtása után az object tartalma a nagy semmi.
Én már nem dolgozom 2003 excelben, de amikor xl2007-ben compatibility mode-ban lementettem file-okat amikben volt COUNTA(H:H) akkor azt mondta, hogy az probléma lehet.
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