Hirdetés

2024. április 30., kedd

Gyorskeresés

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-11-13 08:31:56

LOGOUT.hu

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.

Összefoglaló kinyitása ▼

Hozzászólások

(#25451) Delila_1 válasza Gandalf80 (#25444) üzenetére


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.

(#25452) KaliJoe


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... :-) ;)

(#25453) Wyll válasza Fferi50 (#25241) üzenetére


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 :B
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

(#25454) Wyll válasza Wyll (#25453) üzenetére


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

(#25455) pepenek


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.

(#25456) Wyll válasza pepenek (#25455) üzenetére


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

(#25457) Wyll válasza Wyll (#25454) üzenetére


Wyll
őstag

Most nézem csak, hogy a frissitőből kihagytad az ön-újraidőzítést, nem? :B

Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll

(#25458) pepenek válasza Wyll (#25456) üzenetére


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.

(#25459) m.zmrzlina


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 ]

(#25460) Fferi50 válasza Wyll (#25457) üzenetére


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 ]

(#25462) Fferi50 válasza m.zmrzlina (#25459) üzenetére


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.

(#25463) Fferi50 válasza m.zmrzlina (#25461) üzenetére


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.

(#25464) m.zmrzlina válasza Fferi50 (#25463) üzenetére


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.

(#25465) Fferi50 válasza m.zmrzlina (#25464) üzenetére


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 ]

(#25466) m.zmrzlina válasza Fferi50 (#25465) üzenetére


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 ]

(#25467) Fferi50 válasza m.zmrzlina (#25466) üzenetére


Fferi50
őstag

Nálad az igazság!

(#25468) pirit28


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 ]

(#25469) m.zmrzlina válasza pirit28 (#25468) üzenetére


m.zmrzlina
senior tag

(#25470) pirit28 válasza m.zmrzlina (#25469) üzenetére


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

(#25471) m.zmrzlina válasza pirit28 (#25470) üzenetére


m.zmrzlina
senior tag

Nekem itt egy exe akar lejönni.

???

(#25472) pirit28 válasza m.zmrzlina (#25471) üzenetére


pirit28
csendes tag

(#25473) m.zmrzlina válasza pirit28 (#25472) üzenetére


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?

(#25474) pirit28 válasza m.zmrzlina (#25473) üzenetére


pirit28
csendes tag

Szia !
Pontatlan, információhiányos volt a kérésem ezért kibővítettem file-t.

[link]

#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ó

számmá való konvertálás nem lenne megoldható. Erre keresnék valami egyszerű megoldást ,ami automatikusan megoldaná a számmá alakítást. a 7/MELL-ből :) csak a 7 érdekel a / melletti szöveg nem lényeges. Remélem most már érthetőbb mit szeretnék művelni. data.hu/get/8513958/testv2.xls

[ Szerkesztve ]

(#25475) pirit28 válasza pirit28 (#25474) üzenetére


pirit28
csendes tag

Lemaradt a vége ..
convert number nem lehetséges.

(#25476) slashing válasza pirit28 (#25474) üzenetére


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 ]

(#25477) pirit28 válasza slashing (#25476) üzenetére


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.

(#25478) pirit28 válasza slashing (#25476) üzenetére


pirit28
csendes tag

Nem lényeg, akkor visszatérek a csillagra.köszönöm

(#25479) KaliJoe


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... :-) ;)

(#25480) mustang08


mustang08
aktív tag
LOGOUT blog

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!

(#25481) Wyll válasza Fferi50 (#25460) üzenetére


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

(#25482) Fferi50 válasza Wyll (#25481) üzenetére


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.

(#25483) Fferi50 válasza Wyll (#25481) üzenetére


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.

(#25484) Wyll válasza Fferi50 (#25482) üzenetére


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

(#25485) mustang08 válasza mustang08 (#25480) üzenetére


mustang08
aktív tag
LOGOUT blog

Sikerült megoldanom

(#25486) Fferi50 válasza Wyll (#25484) üzenetére


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.

(#25487) Fferi50 válasza KaliJoe (#25479) üzenetére


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 ]

(#25488) Wyll válasza Fferi50 (#25482) üzenetére


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

(#25489) Fferi50 válasza Wyll (#25488) üzenetére


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 ]

(#25490) Fferi50 válasza Fferi50 (#25489) üzenetére


Fferi50
őstag

Bocs, az Application.Ontime után nem kell a vessző, csak a szóköz.

(#25491) Wyll válasza Fferi50 (#25489) üzenetére


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.. :F
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

(#25492) Fferi50 válasza Wyll (#25491) üzenetére


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 ]

(#25493) Wyll válasza Fferi50 (#25492) üzenetére


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! :C

Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll

(#25494) Tiboy86


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?

(#25495) Fferi50 válasza Wyll (#25493) üzenetére


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.

(#25496) Fferi50 válasza Tiboy86 (#25494) üzenetére


Fferi50
őstag

Szia!

Szumha függvény a barátod.

Üdv.

(#25497) Tiboy86 válasza Fferi50 (#25496) üzenetére


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.

(#25498) Fferi50 válasza Tiboy86 (#25497) üzenetére


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.

(#25499) Tiboy86 válasza Fferi50 (#25498) üzenetére


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.

(#25500) slashing válasza Tiboy86 (#25499) üzenetére


slashing
senior tag

és mi az akadálya hogy eleve felépítsd az egész éves grafikon az 52-3 héttel, beképletezed előre aztán frissíti magát..........

Útvonal

Fórumok  »  OS, alkalmazások  »  Microsoft Excel topic (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.