A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] Gurulunk, WAZE?!
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] [ldave:] New Game Blitz - 2024
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
GAMEPOD.hu témák
Téma összefoglaló
- Utoljára frissítve: 2023-11-13 08:31:56
LOGOUT.hu
Hozzászólások
Delila_1
Topikgazda
2007-es verziótól kezdve a DARABHATÖBB függvény ad erre a feladatra jó választ.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
KaliJoe
csendes tag
Sziasztok,
A kérdésem a következő: Egy egyedileg létrehozott tömb, később egy ciklussal feltöltött eleminek számát - programfutás időben - hogy tudom megkérdezni a programtól. Itt a '.Count' tulajdonság nekem nem működik.
Találgatás:
Talán fel kellene vennem az egyedi tömb tulajdonságai közé, és amikor feltöltöm a tömböt, akkor minden egyes rekordba tegyem be az utolsó rekord sorszámát?
Definíciós rész:
Private Type typ_MunkavállalóAdatbázis
Név As String
SzülDátum As Date
AdóAzonosító As String
TAJSzám As String
TelefonSzám As String
Email As String
BelépésDátum As Date
Munkahely As String
Pozíció As String
End Type
Private udef_MunkavállalóAdatbázis() As typ_MunkavállalóAdatbázis
Felhasználás, feltöltés:
ReDim udef_MunkavállalóAdatbázis(byt_Ciklus)
byt_Ciklus = 1: byt_AktuálisSor = 2
Do Until Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapHosszúNévOszlop).Value = "Vége"
If Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapDolgozóStátuszOszlop).Value = "Aktív" Then
udef_MunkavállalóAdatbázis(byt_Ciklus).Név = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapHosszúNévOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).SzülDátum = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapSzülDátumOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).AdóAzonosító = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapAdóAzonosítóOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).TAJSzám = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapTAJSzámOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).TelefonSzám = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapTelefonSzámOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).Email = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapEmailOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).BelépésDátum = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapBelépDátumOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).Munkahely = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapMunkahelyOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).Pozíció = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapSorSzámOszlop).Value
byt_Ciklus = byt_Ciklus + 1
End If
byt_AktuálisSor = byt_AktuálisSor + 1
Loop
[ Szerkesztve ]
Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)
Wyll
őstag
Szia!
Nagyon köszi a válaszodat, most jutottam csak odáig, hogy érdemben foglalkozzak vele. Egy felvetés: a
timevalue(kovetkezo) > Time
feltétel mindig igaz lesz, hiszen a kovetkezo az egy valódi dátum (Now + Timeserial), ellenben a Time függvénnyel, ami csak az adott napon belüli időt adja vissza, és utóbbi az excel dátumábrázolásában nullánál kisebb érték.
Szóval nem lehet hogy inkább a
timevalue(kovetkezo) > Now
feltételt kéne használni?
***
Őőő, nem szóltam
If the time argument contains date information, TimeValue doesn't return it. ...
[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Wyll
őstag
Viszont azt továbbra sem értem, hogy igazából mire szolgál ez a vizsgálat?
Mert ha netán pont ugyanabban a másodpercben akarunk is kilépni, amikor a frissítés is lezajlik, akkor is ki kell kapcsolni kilépéskor az időzítést, nem?!
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
pepenek
csendes tag
Sziasztok!
Egy weboldal adatbázisát készítem elő Excel-ben. Sorokban a termékek vannak, egyik oszlopban pedig a termékismertetőt kell hogy tartalmazza. Ez Html kódrészletből, majd a változó termékinformációk (cellahivatkozás), majd újabb Html kódrészletből áll.
Az összefűz függvényt használtam az összeállítására. A problémát az idézőjel használata okozta, amit az összefűz függvény használna és a html kód is bőven tartalmazza:
=ÖSSZEFŰZ("<p style="text-align: center;"><span style="color:#000000;">";'[Készlet 2015.xlsx]Készlet'!Y302;"</span></p> <hr /> <p style="text-align: center;"><img alt="" src="http://markabarkaoutlet.shoprenter.hu/custom/markabarkaoutlet/image/data/site/";'[Készlet 2015.xlsx]Készlet'!Z302;"" style="width: 147px; height: 235px;" /></p> <p style="text-align: center;"><span style="color:#000000;">";BJ302;"</span></p>")
Manuálisan úgy oldottam meg, hogy a html idézőjeleit kicseréltem jelölőkarakterre (a függvény " -jelei természetesen maradtak). Az eredményként kapott szövegben a jelölőkaraktereket keresés - csere használatával pedig visszacseréltem idézőjelre.
Van erre szép megoldás?
A helyette függvény sem tudja értelmezni, hogy a jelölőkaraktereket idézőjelre cserélje vissza. A KARAKTER(34) használatával sem mentem sokra, bár lehet, hogy rosszul csináltam.
Wyll
őstag
Egyrészt az összefűzésre használható az
&
(összefűzés) operátor is, szerintem egyszerűbb ezt használni, ha sok az összefűznivaló. Pl:
"Termék neve: " & link & ", ami még változhat."
A stringben pedig idézőjelet duplaidézőjellel tudunk elhelyezni:
"Termék neve: " & link & ", ami még változhat. Speciális, ""barbatrükk"" eljárással készült termék."
Idézőjellel befejezni egy stringet ebből következően három idézőjellel lehet:
"Használt eljárás neve: ""barbartükk"""
[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Wyll
őstag
Most nézem csak, hogy a frissitőből kihagytad az ön-újraidőzítést, nem?
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
pepenek
csendes tag
Köszönöm a gyors választ. Próbáltam össze & operátorozni, de van olyan html rész, ahol "" jel van, azt nem tudtam megoldani. Viszont tovább ügyködtem a helyettesítő karakter visszacserélésén és az sikerült. Összeszedetem vele a kicserélt idézőjeles html szöveget és a változókat, majd a kész szövegben visszacserélem azokat idézőjelre: =HELYETTE(A1;"KARAKTER(34)";KARAKTER(34)) visszarakta az idézőjeleket.
m.zmrzlina
senior tag
Adott egy tartomány (pl C2:C120) amiben kb 100 darab elem (szöveg) van. A 100 elem 5 különböző értéket vehet fel, vannak üres cellák és értelemszerűen az 5 féle elem mindegyike többször is előfordul.
Az a feladat, hogy le kell cserélni minden elemet egy számra, azonos szöveget azonos számra.
Ezt eddig így csináltam:
For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
If UCase(rngCella.Value) = "ALMA" Then
rngCella.Value = 1
ElseIf UCase(rngCella.Value) = "KORTE" Then
rngCella.Value = 2
ElseIf UCase(rngCella.Value) = "BANÁN" Then
rngCella.Value = 3
ElseIf UCase(rngCella.Value) = "NARANCS" Then
rngCella.Value = 4
ElseIf UCase(rngCella.Value) = "CITROM" Then
rngCella.Value = 5
End If
End If
Next
Ez rendben működik de több ilyen lista van amelyek ráadásul folyamatosan változnak, tehát nem a legjobb ötlet beleírni a kódba fixen a neveket és a csereértékeket.
Felvittem az összes listát egy másik munkafüzetbe két oszlopból álló tartományokba, majd elneveztem ezeket a tartományokat a Névkezelővel. Ezekben a tartományokban szeretnék keresni makróból a VLOOKUP() fv-nyel a következőképpen:
For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, _
Workbooks("forrásadatok.xlsx").Names("gyümölcsök"), 2, 0)
End If
Next
esetleg így:
Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök")
Set wsKabelo = ActiveSheet
For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, _
rng_gyümölcsök, 2, 0)
End If
Next
Sajnos egyik sem működik. Mit szúrok el?
[ Szerkesztve ]
Fferi50
őstag
Szia!
"Most nézem csak, hogy a frissitőből kihagytad az ön-újraidőzítést, nem?"
De! Nyilván minden lefutáskor újra kell időzíteni.
Az időzítő kikapcsolásra pedig azért van szükség, mert application szinten van bekapcsolva, azaz "emlékszik rá", hogy kellene valamit csinálnia - ezért "panaszkodni fog", vagy egyszerűen "benyalja" a korábbi fájlt és megcsinálja az időzített folyamatot akkor is, ha nem szeretnéd.
Azért fontos, hogy a következő frissítés időpontját eltároljuk, mert pontosan kell rá hivatkozni a kikapcsolásnál. (Nyilván a Now+timevalue(akármi) egy konkrét időpont, de ha nem tudod mi ez az időpont, akkor nem fogod tudni "utolérni" az időzített programot.)
Az éppen abban a pillanatban elindult frissítést viszont már nem tudod kikapcsolni, az le fog futni, csak a későbbi időpontot lehet "törölni".
Üdv.
(#25461) m.zmrzlina válasza m.zmrzlina (#25459) üzenetére
m.zmrzlina
senior tag
Ha az objektumváltozót a következőképpen deklarálom akkor megy:
Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök").RefersToRange
Set wsKabelo = ActiveSheet
For Each rngCella In wsKabelo.Range("C2:C129")
If rngCella.Value <> "" Then
rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, rng_gyümölcsök, 2, 0)
End If
Next
[ Szerkesztve ]
Fferi50
őstag
Szia!
A VBA-ban a nevek nem úgy működnek, mint a munkalapon. A names("név").referstorange mutat a név által meghatározott területre, a names("név").refersto pedig az adott névhez tartozó terület címét adja meg.
Tehát ezt a sor részt:
Workbooks("forrásadatok.xlsx").Names("gyümölcsök")
ki kell egészíteni:
Workbooks("forrásadatok.xlsx").Names("gyümölcsök").referstorange
Másrészt, sokkal gyorsabb, ha a range.replace tulajdonságát használod:
wsKabelo.Range("C2:C129").replace what:="ALMA",replacement:=1,lookat:=xlwhole
ami az egész tartományban kicseréli az ALMA szót az 1 számra.
A javított makró pedig a Gyümölcsök tartományon megy végig - és kicseréli az első oszlopban található gyümölcsneveket a második oszlopban található számokra:
Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök").referstorange
Set wsKabelo = ActiveSheet
for each cl in rng_gyümölcsök.columns(1).cells
wsKabelo.range("C2:C129").replace what:=cl.value,replacement:=cl.offset(0,1).value, lookat:=xlwhole
next
Egyébként annyit javaslok még, hogy ne használj ékezetes karaktereket a makrókban és a neveknél, mert ebben az esetben nem hordozható a munkafüzeted, más (pl.angol) környezetben hibásan /vagy nem működik.
Üdv.
Fferi50
őstag
Látom, közben Te is megtaláltad a megoldókulcsot. Csak még fűztem hozzá némi egyéb dolgot.
Üdv.
m.zmrzlina
senior tag
Köszönöm eltettem a megoldásokat.
Az első replace-es megoldás most azért nem jó nekem mert pont azt a célt nem valósítja meg ami miatt a Select Case-es szerkezetet le akarom cserélni. A második természetesen jó lesz.
A valódi makróban nem használok ékezetet az csak a illusztrációba került bele.
Fferi50
őstag
Szia!
Az első csak "illusztráció" volt a működésre. (De az is csak annyiszor kell lefusson, ahány gyümölcsneved van és nem az egész tartomány cellaszámának megfelelően.)
Üdv.
[ Szerkesztve ]
m.zmrzlina
senior tag
"(De az is csak annyiszor kell lefusson, ahány gyümölcsneved van és nem az egész tartomány cellaszámának megfelelően.)"
Igen de változás esetén itt ugyanúgy át kell írni az egész kódrészletet mint a Select Case-nél, a másodiknál viszont csak a rng_gyümölcsök listát a másik munkafüzetben. Ehhez pedig nem kell tudni programozni és ez volt a cél.
Köszi még egyszer!
[ Szerkesztve ]
Fferi50
őstag
Nálad az igazság!
pirit28
csendes tag
Sziasztok !
Excel file-ból excel file-ba való másoláskor keletkezik néhány nem számformátum.
Hogyan tudnám ezeket a nem számformátumú cellákat
szám formátumra vagy text-re konvertálni ?
Bármilyen megoldás jó,csak minél egyszerűbb legyen.
Ezen kívül
http://i.imgur.com/E5RORx5.png
Az lenne profi megoldás ha már másolást követően nem is kellene foglalkozni vele .
A választ,és megoldásokat előre is köszönöm !
[ Szerkesztve ]
m.zmrzlina
senior tag
pirit28
csendes tag
Sziasztok !
Újra itt vagyok.Feltöltöttem egy file-t, hátha többet segít a probléma megoldásában.
Az a baj hogy a nem számformátumú számok ,nem azt az értéket tükrözik ami látszik.Ezt szeretném reformálni.
[link]
Köszönöm
m.zmrzlina
senior tag
Nekem itt egy exe akar lejönni.
???
pirit28
csendes tag
m.zmrzlina
senior tag
Ahogy elnézem igen egzotikus formátumkódok vannak helyenként megadva. Ezt állítsd Normál-ra ezután másolható.
A "MAN"-ból és a 7/MELL-ből milyen számot (vagy szöveget) szeretnél látni?
pirit28
csendes tag
Szia !
Pontatlan, információhiányos volt a kérésem ezért kibővítettem file-t.
#25418-hsz-ban volt egy kérésem a *-al elválasztott számok szétszedésében.
Nagyon profin sikerült is ezt a problémát megoldani.
A szétszedéshez használt táblázatból az adatok másolását követően ,amit a Tábla fül A oszlop alatt a található számok igazolnak ,csak úgy végezhető el a szétbontás,hogy az oszlopban levő számokat számmá konvertálom.Viszont mivel ezeket az adatokat percenként kell másolni, ezért a percenként végrehajtandó
[ Szerkesztve ]
pirit28
csendes tag
Lemaradt a vége ..
convert number nem lehetséges.
slashing
senior tag
A2-ben és B2 lévő cella képleteiben van egy ilyen ;HA(SZÁM(Tábla!A1)=IGAZ cserléd le úgy hogy : (Tábla!A1*1)
ez amúgy azért van mert nem tudom hogyna kerülnek oda az adatok de átveszi a régi cellák cellatípusát és a sima számokat így nem számnak gondolja hanem szövegnek......
de ezt a számos vizsgálatot át kellene írni valami másra mert így a sima 1/10-et meg dátumnak veszi majd... eredetileg ezt a feladatot *-al csináltuk így most a / jel miatt máshogy kell
[ Szerkesztve ]
pirit28
csendes tag
Nem is tudom mit mondhatnék = köszönöm
48 órámba került amit te 1 perc alatt megoldottál.
pirit28
csendes tag
Nem lényeg, akkor visszatérek a csillagra.köszönöm
KaliJoe
csendes tag
Sziasztok,
A kérdésem a következő: Egy egyedileg létrehozott tömb, később egy ciklussal feltöltött eleminek számát - programfutás időben - hogy tudom megkérdezni a programtól. Itt a '.Count' tulajdonság nekem nem működik.
Találgatás:
Talán fel kellene vennem az egyedi tömb tulajdonságai közé, és amikor feltöltöm a tömböt, akkor minden egyes rekordba tegyem be az utolsó rekord sorszámát?
Definíciós rész:
Private Type typ_MunkavállalóAdatbázis
Név As String
SzülDátum As Date
Adóazonosító As String
TAJSzám As String
TelefonSzám As String
Email As String
BelépésDátum As Date
Munkahely As String
Pozíció As String
End Type
Private udef_MunkavállalóAdatbázis() As typ_MunkavállalóAdatbázis
Felhasználás, feltöltés:
ReDim udef_MunkavállalóAdatbázis(byt_Ciklus)
byt_Ciklus = 1: byt_AktuálisSor = 2
Do Until Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapHosszúNévOszlop).Value = "Vége"
If Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapDolgozóStátuszOszlop).Value = "Aktív" Then
udef_MunkavállalóAdatbázis(byt_Ciklus).Név = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapHosszúNévOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).SzülDátum = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapSzülDátumOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).AdóAzonosító = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapAdóAzonosítóOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).TAJSzám = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapTAJSzámOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).TelefonSzám = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapTelefonSzámOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).Email = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapEmailOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).BelépésDátum = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapBelépDátumOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).Munkahely = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapMunkahelyOszlop).Value
udef_MunkavállalóAdatbázis(byt_Ciklus).Pozíció = Worksheets("Személylap").Cells(byt_AktuálisSor, const_SzemélylapSorSzámOszlop).Value
byt_Ciklus = byt_Ciklus + 1
End If
byt_AktuálisSor = byt_AktuálisSor + 1
Loop
Frazeológiám: Az ember nem kávéra, nem is kávéházra vágyik, az ember lelke barátra vágyik, a kávé csupán ürügy... :-) ;)
Sziasztok!
Az volna a kérdésem, hogy a képen látható bal oldaliból hogyan lehetne olyat csinálni, mint ami a jobb oldalon van.
Előre is nagyon szépen köszönöm!
Wyll
őstag
"Az éppen abban a pillanatban elindult frissítést viszont már nem tudod kikapcsolni, az le fog futni, csak a későbbi időpontot lehet "törölni"."
Igen, de amit te írtál, az csak akkor törli a későbbi időpontot, ha az már korábban bejegyződött.
Így ha azonos másodpercben zajlik az újraélesítés és a kilépés, akkor a kilépés nem fogja deaktiválni az immár a kilépés utánra datálódó időzítést. (Lehet hogy erre azért nem gondoltál, mert te még nem írtad bele az újraélesítést.)
Nade ez igazából már részletkérdés, a lényeg az ötlet volt, amit köszönök.
Bár azért egy olyan aprócska gond azért van vele, hogy ez tulajdonképpen egy megosztott dokumentumba folyamatosan belefirkál, azaz módosítja magától akkor is, ha a felhasználók hozzá sem nyúltak..
Nem lehet, hogy jobb lenne az idő megjegyzésére egy globális változót használni? Lehet VBA-ban olyat egyáltalán?
És egy jelenség;
a frissítés még nincs benne, egyelőre a rendszeres időzítést akarom szépen stabilizálni:
Ez mi lehet?
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Fferi50
őstag
Szia!
Ez azt jelenti, hogy van egy időzítésed, ami éles és szeretett volna lefutni - de az a program/munkafüzet már nem aktív, ami elindította, illetve amiben a futtatandó makró lenne. Ezért kell kikapcsolni az időzítést, mielőtt kilépsz a programból. Természetesen lehet globális változóba is tenni az időpont értékét (Public-ként vagy Globál-ként is definiálhatod egy általános modulban). Nálam nem volt probléma a munkafüzetbe irkálás.
A közös használat azért igényel némi óvatosságot.
A közös használatú munkafüzetnek van egy saját frissítési opciója. A korrektúra menü munkafüzet megosztása menüpontban láthatod, hogy beállítható a frissítés és az ütközések kezelése is. Természetesen ez megy makróból is.
Ebben az esetben minden nyitott munkafüzet a megadott periódusonként frissíti és menti magát.
Lehet, hogy Neked ebbe az irányba kellene elindulni?
Közös használatúvá tevés:
If Not ActiveWorkbook.MultiUserEditing Then
ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.FullName, _
accessMode:=xlShared
End If
Előtte még be kell állítani a frissítést és az ütközések kezelését is.
Üdv.
Fferi50
őstag
Szia!
Az előbb rosszul írtam, a frissítési periódust a közössé tétel után kell megadni:
ActiveWorkbook.AutoUpdateFrequency=10
Az ütközés kezelés is változtatható határok között:
Activeworkbook.ConflictResolution=xlUserResolution
A változások megőrzési ideje is változtatható.
Üdv.
Wyll
őstag
Igen, ez már megvolt ha visszaolvasol, pont ehelyett akartam áttérni makróra, mivel a beépített frissítés csak beolvassa a változásokat, de a linkeket nem update-eli, ami nekem nem elég, mert a linkek maguk nem változnak, az viszont igen, amit beolvasnak, de az meg már link update, nem szinkronizáció.
Ezért most kézileg kell az egészet újraépítenem, aminek két előnye lesz:
- 5 percnél gyakrabban is beolvashatom a változásokat
- azt teszek a loop-ba amit csak akarok, itt most persze a linkek update-je a lényeg
[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Sikerült megoldanom
Fferi50
őstag
Szia!
Bocs, oly régen volt már a téma eleje - és annyi mindent csináltam már közben - hogy az eredeti apropóra nem emlékeztem.
De a változóba tárolós megoldás természetesen műxik.
Üdv.
Fferi50
őstag
Szia!
Ha tömbnek hoztad létre, akkor az Ubound(tömb) függvény mutatja, hogy hány eleme van az adott tömbnek.
Tehát elég, ha azt írod a redim utasításba, hogy
redim preserve tömb(ubound(tömb+1)).
De ezt minden egyes tömbelem - egész rekord! - beolvasása után meg kell tenned.
A preserve azért kell, hogy megmaradjanak az addig bevitt értékek.
A byt_Ciklus változó helyett használhatod az Ubound(tömb) értéket számlálónak (bár a tömb nevét elnézve, nyilván a rövidebb a praktikusabb.
Tehát közvetlenül az end if elé be kell tenned, hogy
redim preserve udef_MunkavállalóAdatbázis(byt_Ciklus)
Üdv.
[ Szerkesztve ]
Wyll
őstag
Még most is ugyanezt írja ki, pedig azóta konszolidáltam a kódot, és marhára nem csukom be a file-t!
Szépen az x másodperc lejártakor jön a hibaüzenet...
Ennyi a lényeg:
Private Sub Workbook_Open()
Call frissito_idozito
MsgBox "Frissítés elindítva!"
End Sub
Sub frissito_idozito()
Dim kovetkezo As Range, gyakorisag As Range
Set kovetkezo = ThisWorkbook.Sheets("titkos").Range("A1")
Set gyakorisag = ThisWorkbook.Sheets("titkos").Range("A2")
MsgBox "Frissítés..."
'Call frissites
kovetkezo = Now + gyakorisag
Application.OnTime kovetkezo, "frissito_idozito"
End Sub
Akkor sem jó, ha zárójellel a végén írom a string-be a sub nevet.
[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Fferi50
őstag
Szia!
Azt gondolom, az a baja, hogy a kovetkezo cella és nem időérték. szerintem úgy kellene meghívni, hogy
Application.Ontime, kovetkezo.value,"frissito_idozito"
Ezért(is) szoktam én mindig odaírni a value tulajdonságot is, mert bár igaz, hogy a range alapértelemzett tulajdonsága az érték, de sajnos ezt nem mindig tudja a VBA "értelmezni" - itt pl. egy időértéket vár.
Remélem, ez segít.
De szerintem ezzel együtt ki kellene lépni teljesen az excelből, hogy "elfelejtse" ezt az időzítést.
Üdv.
[ Szerkesztve ]
Fferi50
őstag
Bocs, az Application.Ontime után nem kell a vessző, csak a szóköz.
Wyll
őstag
De igazából nem akkor akad ki, amikor (elsőre, kézzel indítva) lefut az időzítés, hiszen egyrészt olyankor még nem kapok hibaüzenetet, másrészt utána pont a beállított idő eltelte után újra le akarna futni, ami helyes.
Csak épp ilyenkor mégsem fut le, hanem jön a hibaüzenet.
Most amúgy odaírtam a value-t is, és nem javított a helyzeten.
Ez inkább olyan, mintha nem találná a kért függvényt.. valami névhiba vagy stringhiba..
Gondoltam hogy esetleg hiányzik a zárójel, vagy ilyesmi, de nem..
Vagy önmagát ne tudná beidőzíteni? Ez csak egy string, nem függvénypointer..
[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Fferi50
őstag
Szia!
Nos, azt gondolom, hogy saját magát nem szerencsés meghívni, hanem egy másik eljárást kell hívni, aminek a végére ismét betesszük az időzítés meghívását.
Tehát az üzenetet tedd bele egy külön eljárásba és annak a végén hívd meg az időzítőt újra. Tehát az időzítő eljárásban a másik eljárás neve szerepel, mint meghívó.
Szerintem ez lesz a nyerő.
Bocs, eddig nem figyeltem fel rá, hogy nem két külön eljárást nézek - biztosan a tavaszi fáradtság volt az oka (ez keltette fel a gyanúmat: "Vagy önmagát ne tudná beidőzíteni?")
Nálam mindig külön eljárás az időzítő és az időzített folyamat.
Sőt, a kikapcsolásra, biztos ami biztos alapon van egy harmadik is.
(Még egy icipici apróság: a call egyáltalán nem szükséges, ha vba eljárásokat hívsz meg.Help:"You are not required to use the Call keyword when calling a procedure.")
Üdv.
[ Szerkesztve ]
Wyll
őstag
Igen, lehet hogy ez lesz a baj - köszi!
Közben találtam egy szép másik példát is CPearson-tól, és ő is különveszi az időzítést, bár konkrétan nem írja le, hogy ezt muszáj így csinálni, de ami a lényeg: így működik!
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Tiboy86
tag
Sziasztok! A következő kérdésem van:
Össze szeretném adni egy cellába azoknak a celláknak az összegét, amelyeknek a sorában található egy konkrét szám.
A konkrét szám ez esetben az, hogy hányadik hét, pl. 1501, 1502, az összegek pedig az azokra a hétre való összbevitel. Tehát van olyan sor, ahol csak az szerepel, hogy hányadik hét, illetve a termékre vonatkozó egyéb információk, és van olyan sok, ahol a hét sorszáma mellett szerepel az input is. Ezeket az inputokat szeretném összeadni, hogy kiderüljön, melyik héten mennyi volt az összes input.
Segítenétek kérlek?
Fferi50
őstag
Szia!
Remélem, úgy fog működni, ahogyan szeretnéd - a változós rész is megy, kipróbáltam public változóval.
Üdv.
Fferi50
őstag
Szia!
Szumha függvény a barátod.
Üdv.
Tiboy86
tag
De halvány gőzöm sincs hogy kell használni.
Ezt kéne tegye:
Ahol az 1. sorban szerepel 1501 a B oszlopban és szerepel szám az S oszlopban akkor azokat a számokat adja össze, és ez legyen a cella értéke. És ebből lesz grafikon, ez lesz az első oszlopa a diagramnak.
Következő oszlopban 1502, stb. stb.
Fferi50
őstag
Szia!
Némi segítséget azért szokott a függvényhez tartozó súgó adni.
A hetek számát tartalmazó oszlopot másold át egy új helyre - akár azon a munkalapon is, úgy, hogy csak egyszer szerepeljen a hét. Ezt megteheted az adatok - speciális/irányított szűrő segítségével, ha 2007-es vagy annál frissebb exceled van, akkor az átmásolt oszlopon adatok - ismétlődések eltávolítása.
Ha megvan az egyedi hétszámod az oszlopban, legyen ez a V oszlop, V1-től kezdődően, akkor a W1 cella képlete
= Szumha(B:B;V1;S:S)
Ezt a képletet húzod végig a hetek számának aljáig.
Üdv.
Tiboy86
tag
Szia!
Köszi a segítséget, de ez így nem jó, nem másolhatom az oszlopot, mert az folyamatosan frissül, és "élőben" kellene frissülnie a grafikonnak is vele együtt.