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.
Ennél egy kicsit bonyolultabb a helyzet. Másik topikban - de lehet, hogy itt is - volt már errő szó és majdnem késhegyre menő vita alakult ki, hogyan találjuk meg az oszlop/sor utolsó celláját, amibe már írhatunk.
Ha folytonos a cellák kitöltése, akkor az End(xldown), illetve End(xltoright) +1 sor/oszlop (offset) megfelelő.
De ha vannak üres cellák közben, akkor ez már nem jó, hacsak nem a "lukakba" akarunk írni.
Ezért sokkal jobb és minden helyzetben használható a Jimmy által leírt mód. ahol a legutolsó sorból, oszlopból indulunk ki és visszafelé nézzük az első tele cellát az End(xlUp), illetve az End(xltoleft) móddal, majd erre jön a +1 sor v. oszlop.
Nem olyan bonyolult és kísérteties, mint amilyennek látszik.
A keresési feltételt úgy kell beírni, hogy "<>" & "szöveg".
Ha tehát a szöveged ="" azaz üres sztring, hogy fogod látni ezt a kifejezést: "<>" & ""? Kitaláltad: "<>". Tehát ez a két kifejezés az excelnél ugyanazt az eredményt adja, azaz nem üres feltételként értelmezi. De ugyanezt jelenti a "*" feltétel is, mivel a * a bármely karaktert helyettesítő "jóker".
Ennek ellentettje, a "=" pedig mit jelent? "Természetesen" azt, hogy üres(!) cellákat keresel.
Viszont amit te írtál be:"<>""" az a nem egyenlő két db idézőjel feltételt jelenti, olyan pedig ugye nem sok cella van/volt az oszlopban.
(Kísérletezéshez javaslom a függvény beírása után a szerkesztőlécen az fx-re kattintva előjövő párbeszéd ablakot, amibe beírhatod a különböző paramétereket és azonnal látod az eredményt.)
Nem egészen a te kérdésedre a válasz (arra Fferi tökéletes választ adott), de azért mégiscsak a kérdéssel kapcsolatos. Én, ha egy táblázat utolsó sorát akarom meghatározni makró nélkül, az alábbi függvényt szoktam használni (ha a táblázat az A oszloppal kezdődik, ha a választott kezdőcellától a táblázat végéig nincs üres cella az oszlopban, utána viszont csak üres cella van):
=darabteli(a10:a10000;"<>")+sor(a10)-1
A problémám e képlettel csak annyi, hogy nem értem a "<>" feltételt. Eredetileg nem ezt akartam beírni, de véletlenül így sikerült. És müködik. Amit meg akartam volna, azaz az "<>""", meg nem a táblázat utolsó sorát adja :))).
Megmagyarázná valaki az első feltételt? Mármint azt, hogy az excel szerint mivel nem egyenlő a nem egyenlő?
Most fogtam csak fel, mi történt. Engem a keresési beállításoknak a makrós keresés utáni megmaradása zavart meg kézi üzemmódban. És ezt most ki is próbáltam, és tudtam reprodukálni a jelenséget. Amikor a programom utoljára olyan keresést hajtott végre, ami pontos kifejezésre keresett, és a program leállítása után az Excelt nem kapcsoltam ki, megmaradt a program beállitása, sőt, még az utoljára használt keresőkifejezés is.
És a program leállítása után is bármely fájl megnyitásakor ezt a beállítást találom, amig ki ne lépek magából az excelből. Nagy reveláció volt:-) Köszönöm.
Akarok egy macrot írni. Egy lapon akarom megtalálni egy oszlopban az utolsó elem alatti cellát. A ctrl lenyillal megtalálom az utolsót, de még egyet lejjebb szeretnék lépni. Hogy tegyem?
A "teljes cellatartalomra való keresés" beállítás nem mentődik munkafüzettel. Lásd a súgót (Range object, Find method):
The settings for LookIn, LookAt, SearchOrder, and MatchByte are saved each time you use this method. If you don’t specify values for these arguments the next time you call the method, the saved values are used. Setting these arguments changes the settings in the Find dialog box, and changing the settings in the Find dialog box changes the saved values that are used if you omit the arguments. To avoid problems, set these arguments explicitly each time you use this method.
Köszönöm. A problémám nem a makróval, csak a kézi kereséssel volt. Megnyitottam egy üres excelt, ott nem volt beállítva a teljes cellatartalom keresése. Akkor viszont lehetséges, hogy a most épp használt fájlomat én mentettem el így, csak nem foglalkoztam azzal, hogy mentés előtt legyen kikapcsolva ez a beállítás. Ezért jelent meg újra, és újra. Most mentettem jó beállítással, újraindítottam a gépet, és most jónak tűnik.
A keresés megőrzi az utolsó beállításokat. Nincs más teendőd, a megnyitott üres excelnél a keresés egyebeknél kiveszed a teljes cellatartalomra vonatkozó jelölést. Ezután mindaddig amíg nem keresel másként, ez a beállítás fog érvényesülni. De a biztonság kedvéért zárd be az Excelt, majd indítsd újra. Ha most keresni akarsz, akkor az a jelölőnégyzet már üres kell legyen.
Egy egészen az alapokat érintő kérdésem van, amit illenék már tudnom ennyi év használat óta. Szóval néhány hete dolgoztam egy adatállománnyal, ahol többször szükségem volt arra, hogy a keresésnél bejelöljem a 'Ha ez a cella teljes tartalma' melletti négyzetet.
Azóta viszont képtelen vagyok megszabadulni tőle. És mivel az a gyakoribb eset, hogy nem a teljes tartalomra keresek, mindig bosszúságot jelent, hogy ezzel az alapértelmezéssel indul a keresés. És nem találom, hogy hol tudnám kikapcsolni.
"Csak" annyi a probléma, hogy a számok angol formátumban vannak a szövegben, ígya amikor az érték függvény átalakítja, akkor a pontok miatt minden olyan számot, amit lehet dátumként értelmezni, dátumnak vesz (pl. 1.20 = január 20-a folyó évben), amit meg nem tud dátumnak értelmezni, arra mondja, hogy értékhiba.
Ugye akkor tudunk igazán segíteni, ha leírod, milyen excelt használsz és kis mintát teszel fel a problémából.
Próbáld meg Delila javaslatát.
Ha angol verziód van, akkor nincs tippem se, mert annak a viselkedését nem ismerem.
Hát azt még elképzelni sem tudom, hogyan lesz 1.20-ból , 41659, de az 1.20 miatt arra gyanakszom, hogyha az exceled tizedesvesszős számábrázolású, akkor az ÉRTÉK függvény nem fog boldogulni a tizedespontos számokkal. Ezért elötte az összes pontot cseréld ki vesszőre. A 2007-es excelben Kezdőlap/Szerkresztés/Keresés/Csere. És utána jöhet az ÉRTÉK. Bár az az igazság, hogy az excel2007-től már el is hagyható.
2.A munkalap első olyan cellájába, amelyben az eredeti munkalap számot tartalmaz, írd be a következő képletet:=Érték(Régimunkalap!cella)
3. Ezt a képletet húzd végig következetesen minden sorra és oszlopra, amelyben az eredeti munkalapon a számok vannak.
4. Ezután az így keletkezett területet jelöld ki. Másolás, irányított beillesztés - értékek.
Ezzel megszűnik a képlet eredeti munkalaphoz kötése.
5. Így a most keletkezett számokat újra kijelölve, másolás - eredeti munkalapra beillesztés. Ezután a beszúr munkalapot akár törölheted is.
Nos a..3. lépés után már ezt kaptam ..kép mellékelve
Ami bár azt mutatja hogy számformátummá alakította , ám pont ez a problémám bármilyen módon szeretném mindig pld. 1.20 szövegformátumból , 41659 számformátumot csinál
Annyiban nem, hogy akkor viszont nem illenék ráállnia és futásidejű hibát jelezni, ha ki akarja a program olvasni az értékét. Más tulajdonságoknál meg tudták oldani, hogy bizonyos beállítási hibákat, ellentmondásokat ignorál a program. Ez is fejfájás a program írójának, de legalább nem a felhasználó szembesül vele. Most még szerencse, hogy most jelentkezett, és nem egy-két év múlva a használatban.
Elég nagy mennyiségű tizedes számok vannak egy munkalapon , amik szöveg formátumban kerültek a táblázatba , ám így persze semmilyen számítást nem lehet végezni velük. Lehet-e valahogy egyszerre szám formátumra alakítani ezeket?
Gugli a barátom de ami leírásokat találtam nem müködnek nekem..
Örülök, hogy megoldódott a probléma. Ezek szerint a curline nem szereti, ha nincs még első(azaz) nulladik sor (vagyis egy karakter sem) a textboxban vagy másban. Hát ezt azért beírhatták volna a Help-be is.
Természetesen én is a form inicializálásába tettem, nem eseményhez kötve. Betettem a debug.print parancsot is, és találtam egy érdekes bugot, merthogy ez nem lehet más: Az Excel hibát jelzett, már a curline olvasásakor is, amikor olyan sorra hivatkozott curline, ami üres volt. Tehát, amikor egyetlen soros volt a szöveg, és a curline hivatkozásnak 2-est kellett volna adnia, akkor hibát jelzett. Viszont chr(13) karakterekkel feltöltve tudta kezelni a parancsot (Innen tudom, hogy a 2-es az értéke)
Sajnos nem egészen jött be. A CurLine 0 értékkel azonnal hibát jelzett (Unexpected call to method or property access), de 1-el ráállt a 2. (0-tól számitva 1.) sorra. Csakhogy amikor a dobozba egyetlen sornyi szöveg kerül csak (ami feltehetően a 0. sorban van), akkor unspecified error hibával áll le.
Viszont nem oldja meg az eredeti problémát. Ugyanis ha már scrollozott lefelé, akkor nem megy vissza, hanem csak az ablak látható tartományában áll annak a tetejére.
TextBox1.SetFocus 'ezt gondolom nem kell magyarázni TextBox1.CurLine = 0 'ez az első sorra állítja a cursort, de csak akkor érvényes, ha rajta van a fókusz a texboxon.
Nagyon köszönöm. Ezek alapján meg tudtam csinálni.
Most már csak egy problémám maradt. Amikor sok a szöveg, és megjelenik a függőleges Scrollbar, az rögtöm a doboz aljára lép. Én meg azt szeretném, hogy alapesetben a beleírt szöveg teteje lássék, és a továbbolvasáshoz kelljen lefelé görgetni. De erre nem látok kapcsolót.
Akkor az eljárás belsejében megnézed, hogy az a bizonyos cella ki van-e töltve. Ha igen, akkor mehet a bezárás, ha nem, akkor cancel=true és nem fogja bezárni a füzetet:
"expression.BeforeClose(Cancel)
expression A variable that represents a Workbook object.
Parameters
NameRequired/OptionalData TypeDescriptionCancel Required BooleanFalse when the event occurs. If the event procedure sets this argument to True, the close operation stops and the workbook is left open."
Visszatérve a 0.00 és a - esetére: Az adott egyedi cellaformázásban a 0 helyére - jel van rendelve. Nézd meg a cellára ráállva a cellaformázás-szám, egyéni formátumot. Ott látni fogod, hogy a negatív szám zárójeles, a 0 pedig - jel.
(az egyéni formázások helpje segít jobban megérteni a témát).
Ilyen lett a lekérdezés rész amelyet tudok használni árajánlatban De egy képeffekt azért jó lenne ehelyett a silány kékszín helyett. Be lehet illeszteni tartományba háttérképet?
Amennyiben a válasz igen akkor a hogyanja érdekelne:)
Bocsi, hulyesegeket irtam (reszben), meg rossz kepeket tettem be, most akkor a tenyleges kerdesek / jo kepek:
Sziasztok!
Felteteles formazassal kapcsolatban lenne kerdesem. Azt szeretnem, ha egy adott oszlopban azokat a cellakat szinezne be, amelyek erteke 0.01-nel nagyobb VAGY -0.01-nel kisebb. Tehat a 0.00-t es a 0.01-et, illetve -0.01-et NEM kellene beszineznie. Kiprobaltam 2 felekeppen is, de egyik sem mukodik tokeletesen, mert a 0.01-es / -0.01-es cellakat is beszinezi (a 0.00-t nem). Kijeloltem sargaval azokat a sorokat, ahol nem mukodik a formazas.
1. megoldas: =OR($G2>0.01,$G2<-0.01)
2. megoldas: abszolut ertek fuggveny es aztan nagyobb, mint 0.01
Mit csinalok rosszul? Kiprobaltam 0.02-vel is, de ugyanaz az eredmeny :(
A G7-es / H7-es cellaban miert - (minusz) es nem 0.00 jelenik meg? elvileg ugyanaz a formatuma az osszes cellanak (ecsettel "lehuztam" az elso sor formatumat).
Felteteles formazassal kapcsolatban lenne kerdesem. Azt szeretnem, ha egy adott oszlopban azokat a cellakat szinezne be, amelyek erteke 0.01-nel nagyobb VAGY -0.01-nel kisebb.
Kiprobaltam 2 felekeppen is, de egyik sem mukodik tokeletesen, mert a 0.01-es / -0.01-es cellakat is beszinezi. Kijeloltem sargaval azokat a sorokat, ahol nem mukodik a formazas. A harmadik sorban az egesz sor sarga lett, a hatodikban viszont a G es H oszlopokban nem szinezte at sargara a cellakat, ennek mi lehet az oka?
1. megoldas: =OR($G2>0.01,$G2<-0.01)
2. megoldas: abszolut ertek fuggveny es aztan nagyobb, mint 0.01
Mit csinalok rosszul? Kiprobaltam 0.02-vel is, de ugyanaz az eredmeny :(
A G7-es / H7-es cellaban miert - (minusz) es nem 0.00 jelenik meg? elvileg ugyanaz a formatuma az osszes cellanak (ecsettel "lehuztam" az elso sor formatumat).
Az AutoSize és a Scrollbars, valamint a WordWrap befolyásolja egymás működését.
Ha a Textbox mérete fix, akkor mindkét scrollbar működik, ha a szövegek vízszintesen vagy függőleges túlmennének a textboxon (és persze a scrollbarok be vannak kapcsolva). Kivéve Wordwrap!
Az AutoSize on esetében a scrollbar nem működik akkor sem, ha be van kapcsolva, ami tulajdonképpen érthető, hiszen a textbox mérete ilyen esetben mindig felveszi a szöveg méretét. Képes "kimászni" a formról is a textbox és akkor nem látod a végét!
A WordWrap on esetében a vizszintes scrollbar nem működik, mivel a szöveget az adott szélességben töri bele a textboxba a rendszer (ilyenkor Autosize On esetén is változatlan a textbox szélessége!).
Tehát az Autosize on-off állapotot programból kezelni kell, attól függően, hogy milyen hosszú szöveget írsz bele.
Mivel a hosszabb szöveg és fix méret esetén a scrollbar működik, az jól mutat. Viszont ugyanakkora textboxban egy rövidebb szöveg már "csúful" néz ki. Így bekapcsolt WordWrap mellett kell a rövidebb szövegre az AutoSize bekapcsolása, hosszabb szöveg esetén pedig egy előre meghatározott fix magasság megadása. Ezzel elérheted, hogy mindkét esetben "szépen" nézzen ki a textbox. (A scrollbar legyen bekapcsolva, és nem kell hozzányúlni, az magától eltűnik és visszajön, ha szükséges a szöveg mérete miatt.)
A bállításokat a Userform inicializálásánál próbáltam. Valahogy így:
Private Sub UserForm_Initialize() Dim text As String text = "Itt olvas be adatállományból egy hosszabb" & Chr(13) & "előre összeállított" & Chr(13) & Chr(13) & _ "szöveget ahol a sorok elválasztására néha egy, vagy két bekezdésjel szolgál" & Chr(13) & Chr(13) & _ "Végül még felteszi a kérdést, hogy véggezzen-e el valamilyen műveletet, vagy sem." SzovegDoboz.Value = text SzovegDoboz.MultiLine = True SzovegDoboz.ScrollBars = fmScrollBarsHorizontal SzovegDoboz.WordWrap = True SzovegDoboz.AutoSize = True End Sub
Miközben ugyanezt a feladatot a következő sorokkal könnyedén megoldom:
Set uzenetdoboz = CreateObject("Wscript.Shell") valasz = uzenetdoboz.Popup(text, 0, cimszoveg, 4)
Ahol a valasz értéke 6, ha az Igen, 7 ha a Nem gomot választotta.
Mutatnál valamilyen kódrészletet a texbox ügyében, mert az autosize és a scrollbar kellene, hogy érvényesüljön, hacsak nem gátolod meg valamivel (pl. Te adsz neki értéket: "If you manually change the size of a control while AutoSize is True, the manual change overrides the size previously set by AutoSize.")
Lehet, hogy valami ilyesmi játszik veled "ördögöt".
Kösz a makrónévadási szabályokat. Az persze nincs köztük, amit nekem sikerült roppant kreativan megszegni :))). Vagy legalábbis nem látom köztük, hogy a cellahivatkozásként is szóbajöhető betű + szám kombinációk használata sem igazán szerencsés.
Viszont sajnos valamiért nálam nem működik az AutoSize. Azt tapasztalom, hogy az egyébként megadott Width és Heigth adatot 1-1.5 értékkel (azt hiszem pixel) módosítja, de nem látom, hogy köze lenne a benne szereplő szöveg méretéhez.
És úgy látom, hogy a ScrollBars beállítás sem eredményez Scroll Bar-t akkor sem, ha szükség lenne rá.
Szóval nem tudom, mit bénázok el, de most hogy a napom nagy része elment vele szégyenszemre átmenetileg feladom, mert holnapra szeretnék eredményt produkálni.
Ezért visszatérek a Popup technikához, ami egyetlen parancssorral egy MsgBox-ra emlékeztető képet ad. Amig ki nem derül, hogy valami gond van vele.
Próbálgatással kiderítettem, hogy miként tudom a konstansokkal befolyásolni a működését. Például azt, hogy OK, OK/Mégse, Igen/Nem, Igen/Nem/Mégse stb válaszra várjon (7 féle van), valamint azt, hogy a válasz hiányában elkapja-e a képernyőt, vagy sem, és ha igen, mennyi idő után. Ráadásul függvényként használva visszaadja a választott gombnak megfelelő konstans értékét (Igen=6, Nem = 7 stb.). És eddig nem találtam meg azt a hibát, amire az MrExelbeli válaszadó azt írja, hogy "AutoDismiss sometimes dosen't work ?". Lehet, hogy csak arra gondolt, hogy az adott konstans bizonyos értékek megadását nem fogadja el. Én mindenesetre csak a 0 értékkel használom, amivel vár a program a válaszra. Nyomjon már gombot az a fránya felhasználó:-)
Szóval köszönöm a segítő szándékot, de nekem most nem jött össze az alternatív (talán szabályosabb?) megoldás.
Néha a legkézenfekvőbb dolgok kerülik el az ember figyelmét - de sokszor jártam így én is.
Másrészt, ha a képek tulajdonságai részben azt állítod be az objektum elhelyezésénél, hogy az objektum helye és mérete nem változik, akkor rendezheted akárhogy, mindig ugyanott marad.
Tehát a rendezés csak akkor működik így, ha az objektum elhelyezése : áthelyezés a cellákkal de a méret marad, vagy áthelyezés és méretezés a cellákkal együtt.
Mertem remélni, hogy nem az első verzió van nálad.
Gyors leszek. A-Z rendezés esetén a képek ugyanott maradnak. Lehetséges hogy rendezés során adott szöveg mellé adott eredeti kép kerüljön? Ha igen hogyan?
Kösz. Azt tudom, hogy a textbox méretét tudom szabályozni, csak az a nehézségem, hogy a szöveg leghosszabb sora alapján megadjam a szélességet, és a sorok száma alapján a magasságot. Egyszer már bütyköltem a szélesség beállítással egy többoszlopos listboxnál, és úgy emlékszem, hogy gondjaim voltak vele. De majd előszedem, hogy végül mire is jutottam.
Az idézett mondatot olvastam, de őszintén szólva nem tudtam mit kezdeni vele. Különösen, hogy még ő maga sem biztos a dolgában, hiszen kérdőjelet tett a megjegyzés végére.
Szerintem külön userform kellene a textboxnak. Akár még úgy is nézhet ki, mint egy MsgBox. A form méretét, rajta a textbox méretét szabadon változtathatod runtime a Height és Width tulajdonságokkal, és a textbox tartalmazhat görgetősávot.
A scriptinges megoldásban van egy sor, amire felhívnám a figyelmedet:
'// Scripting MsgBox, AutoDismiss sometimes dosen't work ?
És még valami. Úgy láttam, hogy a popup ablak dinamikusan méreteződik, azaz alkalmazkodik a benne lévő szöveg méretéhez, úgy a sorok hosszát, mint az ablak magasságát illetően. Nem vagyok biztos abban, hogy ezt a textboxnál is meg tudom-e valósítani. Mert a kevés szöveg egy nagy ablakban nem mutat jól, a sok szöveg túl kis ablakban szintén kényelmetlen, ha sokat kell scrollozni.
Át sem gondoltam. Az újdonság varázsa, és az egysoros parancs lehetősége miatt csak ezt próbálgattam. De akkor majd megnézem textbox-al is. Úgyis egy userformról hívom meg a programrészletet, ahol használni akartam.
Miért kérdezed? Láttál már név nélküli makrót? Legalább egy karaktar kell és az betű legyen. Bővebben idézet a VBA helpből (már megint, de én is innen szoktam okos(k)odni...):
You can't use a space, period (.), exclamation mark (!), or the characters @, &, $, # in the name.
Name can't exceed 255 characters in length.
Generally, you shouldn't use any names that are the same as the functions, statements, and methods in Visual Basic. You end up shadowing the same keywords in the language. To use an intrinsic language function, statement, or method that conflicts with an assigned name, you must explicitly identify it. Precede the intrinsic function, statement, or method name with the name of the associated type library. "
Sziasztok, beleütköztem a következő problémába: Változó mennyiségű üzenetet szeretnék a felhasználóhoz eljuttatni. Ehhez az MsgBox nem alkalmas, mert benne korlátozott az elhelyezhető szöveg mennyisége, és egyes esetekben még a választ lehetővé tévő gombok sem látszanak.
Találtam az interneten egy megoldást (http://www.mrexcel.com/forum/excel-questions/383208-scroll-bar-message-box.html), ahol a scriptinget ajánlja a válaszadó. Kipróbáltam, de nem találok a paramétereiről használható leírást. A megadott konkrét példával pár másodperc múlva eltűnik a doboz a képernyőről, miközben én választ várnék a felhasználótól.
Két kérdésem lenne. Az egyik az, hogy egyáltalán használható-e ez a technika a környezettől némiképp függetlenül. Mert úgy látom, hogy talán nem az Excel, hanem a Windows szolgáltatása.
A másik, hogy hol találok egy kicsit részletesebb leírást ennek a technikának a használatáról? Mert próbálgatással már sikerült ugyan megállítanom a képet az OK megnyomásáig, de azért jobb lenne ezt elolvasni.
Azért kell két munkalap, mert az egyiken kiválasztja az összetevőket, a másikon pedig a finomhangolást végzi (gondolom).
A szinkron arról szól, hogy mindkét lapon ugyanaz az listaelem legyen kiválasztva. Ez azért kell, mert ennek az állása határozza meg, hogy milyen adatok kerülnek át az egyik lapról a másikra.
Vagyis, ha a már kiválasztott listaelemet az árajánlaton megváltoztatom, annak megfelelő elemek kell,hogy odakerüljenek erre a lapra - de azt a másik lapon levő kiválasztó determinálja.
Amíg nincs árajánlata, addig viszont az áras munkalapon "játszik" a legördülő listával. Emiatt kell mindkét lapon ugyanaz.
Utána néztem, jól emlékeztem. A különböző lapokon, füzetekben levő legördülő listák minden további nélkül hivatkozhatnak ugyanarra forrástartományra, tehát felesleges az azonos listaelemeket tartalmazó egyedi forrástarományok létesítése, majd azok szinkronizálása.
Ha mindkét munkalapon kell, akkor nem úszod meg makró nélkül, mivel a legördülő lista értékét át kell adni a másik munkalapra.
Az érvényesítés tartománya lehet ugyanaz mindkét lapon (úgy a legegyszerűbb, ha elnevezed a listatartományt és névvel hivatkozol rá az érvényesítésben).
A munkalap (mindkettő) change eseményéhez kell írni a kis makrót amivel az egyikben bekövetkezett változást a másikba átmásolod.
pl.:
Az árajánlatban:
if not intersect(target,range("B8")) is nothing then
Nem igen értem, miért kell 2 füzet és 2 legördülő lista. Miért nem jó az, ha az árajánlat füzet tartalmazza az árlistát is?
Mivel csak érintőlegesen foglalkoztam a legördülő listázással, nem vagyok benne biztos, de nekem úgy dereng, hogy egy legördülő lista hivatkozhat egy másik füzet tartományára is.
Ha bármelyik eset teljesülhet, egy árajánlatos legördülő listával megoldhatod a problémádat.
Igen mindkét munkalapon kellene ugyanaz a legördülő lista és mindkét lapról változtatni kellene tudni de ha az egyiken megváltoztatom a másikon is szinkronban kell változnia mivel a legördülő listában szereplő adat alapján kalkulálódik ki az ár.
Ha jól értem a kérdést, akkor mindkét munkalapon kellene ugyanaz a legördülő lista és mindkét lapról változtatni kellene tudni. Ráadásul a legördülő lista az árlista munkafüzetben külön is változik? Vagy ott mindig ugyanaz a lista?
Megoldódott köszönöm! Egy szinttel előrébb vagyok leszerkesztettem mindent
Van két munkafüzetem egy Árlista "1.jpg" és egy Árajánlat munkafüzet "2.jpg"
Az Árajánlat munkalap B8 cellája hivatkozik az Árlista_hun adott cellájára az alábbiak szerint ="'" & (Árlista_hun!$R$25). Az árajánlatban szerepl B8 cella tehát egy lekérdezett hivatkozott adat. A lekérdezett adat pedig egy legördülő listából kiválasztott adat. Próbáltam másolni az Árlista celláját viszont beillesztés után a legördülő liosta nem jelenik meg így minden esetben vissza kell mennem Árlista oldalra majd a legördülő lista adatai ugyan megjelennek Árajánlat munkalapon de a lépkedést szerintem ki lehetne váltani ha valahogy be tudnám illeszteni a legördülő listát. Azaz ha jól teszem fel a kérdést akkor szinkronban kellene működnie a két legördülő listának. Ha egyik helyen változtatom akkor a másik munkalapon is változnia kell az adatnak. Lehetséges ez?
Kellene egy kis segítség mert még elrendezés szempontjából sincs ötletem nemhogy függvényekkel manipuláljak :)
Van kettő termék. Ami kettő különböző alapanyagból készül. Ezek az alapanyagok több forrásból is származinak Annyi csak a különbség, hogy más az ára de nekem meg kell különböztetnem készlet szempontjából.
Az igazgató megmondja hogy tárgyhéten melyiket használjuk. Ezt kellene valahogy definiálnom hogy melyiket csökkentse.
Alapelmélet az, hogy (beérkezett alapanyag)-(legyártott termék)=késztermék. A problémám az, hogy melyik árú terméket csökkentsem.
Valami olyasmin gondolkozok hogy napi intervallumok között vagy heti szinten definiálnám, hogy melyiket használja. A napinál gondolom igencsak macerás lenne.
A heti lenne a jó de úgy hogy megadom melyik alapanyagot vegye figyelembe. Ha használjuk akkor csökkenti ha nem akkor nem foglalkozik vele mert éppen azon a héten csak az 1 terméket 1 alapanyaggal gyártottuk. De ugye megeshet hogy minden nap más a forrás...
Ez összesíti az A oszlop olyan adatát, amelyhez nincs a C oszlop megfelelő cellájában adat. (Vigyázat, bármit írsz a C oszlop cellájába, az már nem üres, tehát arra, hogy oda dátum kerül, neked kell figyelned).
Egy szerintem egyszerű problémára keresnék megoldást, hátha tudtok segíteni...
A oszlop tartalmaz összegeket B oszlop tartalmaz fizetési határidő dátumokat C oszlop pedig tartalmazza az összeg tényleges beérkezési dátumát
Szeretnék egy olyan cellát ami a kintlévőségek végösszegét tartalmazza. Ha a C oszlop egyik sorába beírnám a dátumot, akkor a kintlévőségek végösszege a sor összegével csökkenne.
Ezután részletesen fel van sorolva a billentyű hozzárendelés, amiből kimásoltam az előbbi hozzászólásban levőt - és valóban, a numerikus billentyűkkel nem működik, csak a "betűs" részen -.
Viszont a linken található PDF formátum egyrészt nem angol nyelvű, másrészt más billentyű parancsokat mond pl. a dátumra is - de az nem működik.
Lehet, jelezni kellene MS felé ezt az ellentmondást.
Nálam a súgó a Ctrl+ "+" -t hozza, de sem azzal, sem a Ctrl+0-val nem adja a dátumot (és semmi mást sem).
Valamikor volt olyan kitétel, hogy a cellán állva, de a szerkesztőlécen kell bevinni a Ctrl+valamit, most ez sem jön be. Egyszer régebben, talán pontosan ezen a fórumon valaki írt rá egy nyúlfarknyi makrót, és ahhoz rendelte a bill. kombinációt.
A 2. képhez: akkor gondolom megtaláltad a lenyíló első sorában az aktuális kijelölés kifejezést.:)
A dátumhoz: nagy valósznűséggel van egy másik makró rendelve a ctrl+ billentyűhöz. Nézd meg a makróidat, illetve az Excel gyorsbillentyű hozzárendeléseit. Ki fog derülni a turpisság.
Mindezt meg is tettem ekkor jött egy probléma beszummázom az adott cellát amely tartalma alfanumerikus és betűkaraktereket is tartalmaz. Azt vettem észre ha csak sima számot tartalmaz pl "1" akkor beilleszti az adatot de ha a cella "L=0,5-1méter, s/s 0,8mm" adatot tartalmazza akkor a visszakapott érték 0 lesz . Próbáltam a cellaformázással de valahogy nem akarja az igazat. Az árajánlat esetében ez azért lenne fontos mert a legördülő menüben kiválasztott szöveg tartalma jelenne meg az árajánlat adott hivatkozott sorában. Mit kell tegyek, hogy a cella tartalma egy az egyben jelenjen meg.
Az lenne a kérdésem, hogy adott egy táblázat, mondjuk 8 oszlopból, és 2200 sorból áll. Feltételes formázással könyedén betudom állítani azt, hogyha a sor utolsó cellája 0-tól nagyobb számot tartalmaz, akkor a teljes sor pirossal kitölti. A kérdés az lenne, hogy hogyan tudom megcsinálni azt, hogy minden sorban így működjön, és ne kelljen minden sorra külön megcsinálja ezt az 1 perces beállítást. Tehát összefoglalva, az utolsó cellájában 0-tól nagyobb szám van, az a sor legyen pirossal kitöltve.
Kérdés, hogy a munkafüzet közös használatú(egyidőben többen is használhatják), vagy egyszerre csak egy felhasználó.
Ha közös használatú, akkor lsz. olvasd el a help erre vonatkozó részét, mert ott az egyes felhasználók külön-külön is mentenek - sőt kell is menteniük a változásokat.
Egyébként a Thisworkbook BeforeClose eseményéhez rendelhetsz makrót, amiben mented a munkafüzet egy példányát másként.
A mentés feltételeit persze neked kell végig gondolni a fentiek figyelembe vételével is.
Egy szerveren lévő Excel fájl biztonsági mentését szeretném megoldani valahogyan - automatikusan :-)
Valami olyanra gondoltam, hogy a fájl bezárásakor egy szintén a szerveren lévő más mappába másolja a fájlt magát, illetve az ott lévőt felülírja az újjal.
A dokumentumot naponta sokszor, több felhasználó nyitja meg, és ír bele (iktatóként használjuk).
Megoldódott köszönöm a sor kijelölése volt nálam a gond a beillesztés után csúszva volt a sorom. Szóval megírni nem tudtam volna most már kezdem átlátni ezt a hol van függvényt:)
Bővítve ezt az ékességet szeretném ha a kapott cella az adott oszlop és felirtát tartalmazná.
Árajánlat esetében ekkor automatikusan kiíródna a termék neve az összeg előtt pedig meg szeretném jeleníteni a B13 B14 választéklista tartalmát.
Az így kapott adathalmazt ebben az esetben egy adott előre megírt űrlapba tehetném vagy automatikusan oda illeszteném be. Lehetéges ez (is) :)?
A kikapcs-bekapcs sem segített. Megnéztem excel 2003mal is. Ott nem volt semmi probléma, úgy viselkedett ahogy kell. Tehát a 2007-esemmel van valami gubanc :((((
Kiválóan működött az enyémmel is, míg be nem zártam mentés nélkül a füzetet. :)
A két HOL.VAN függvény adja meg a keresett sort, és oszlopot. Éppen azért adtam meg tartománynak az A1:P11-et az elején, mert az oszlopot a teljes első sorban kell keresni.
Ami azért fontos, mert sorokat, oszlopokat ugyanazon a tartományon belül kell keresni, különben "kilóg" - na nem a lóláb, hanem - helytelen lesz a hivatkozás.
Ezen egy excel munkalapon többek közt van 2 kép. Egy kutyus és egy excel logo. A videon az első percben a következő történik.
-Klikkel kijelölik a kutyus képét
- Majd a szerkesztőlécen beírják az excel logo munkalaptartományát (=$B$3:$C$7)
-Erre a kutyus képe átvált az excel logora.
Na most nálam: Kijelölöm a kutyus képét (illetve a vele ekvivalens saját ábrámat), ami azonnal blokkolja a szerkestőlécet és nem enged beleírni semmit. ????
Egy "árajánlat készítőt" szeretnék a nagy számok összességében Megvan a táblázatom amelyben egy oszlop és egy sor kereszteződésének értékét szeretném megkapni aképpen ahogyan a legördülő választéklista értékeit megadtam. Érthetőbben a képen a szürke részekkel jelölt részek kereszteződése jelenne meg a piros mezőben.
Már miért ne lehetne az OnAction-t makróból hozzárendelni?
Ismét egy idézet a Help-ből:
"Excel Developer Reference
Shape.OnAction Property
Returns or sets the name of a macro that’s run when the specified object is clicked. Read/write String."
Tehát: shape.onaction="makró neve" és már kész is a hozzárendelés. Egy azonban fontos, hogy a makró neve teljesen pontos legyen, tartalmazza a munkafüzet és a munkalap/modul nevét is.
(Amit ha lekérdezed egy már hozzárendelt makró nevét, akkor láthatod is.)
Na most értem el oda, hogy megpróbáltam a shape.onaction-nel a figurához makrót rendelni. Úgy néz ki nem megy, mert nem arra való. Hanem arra, hogy a figurához már előzőleg hozzárendelt makró nevét adja vissza. No de hogy történik a makróhozzárendelés? Mint kiderült, meglepően egyszerűen: Klikk a képre, majd jobbklikk, majd a menüből makró hozzárendelése. És kész.
Ezzel a sakkprogram minden nyitott kérdése megválaszolást nyert. Sokat tanultam belőle. Neked is köszönöm a tanácsokat. Mint mindenkinek, aki segített.
Most már elboldogulnék az Arial Unicode Ms sakkfigurákkal. De azért megkérdem, van annak valami komolyabb oka, hogy ha mondjuk az A1-ben levő figurát lekérdezem, akkor az unikódját decimálisan adja meg, amit azonban a C1-be történő figurabeiráshoz hexadecimálissá kell alakítani. Azaz:
Range("c1") = ChrW("&H" & Hex(AscW(Range("a1"))))
És lenne még egy kérdésem: Kerestem a súgóban hogy hol ír arról, hogy a hexadecimális számokat a „&H”-val kell jelölni, de sehol sem találtam. Tudja valaki, hogy hol találhatnám ezt meg a sugóban?
Most ez egy érdekes kérdés, hogy helyből fenn volt-e nálam is, vagy a mostani telepítésemmel került-e föl. Az a gyanum, ez örökre rejtéy marad :))). De akárhogy is, kösz neked is a segitő hozzászólást.
Kösz, hogy feltetted az ábrát, így én is megtaláltam. Egyéb szimbólumok címszó alatt. Sosem használtam az alkészleteket, sőt nem is tudtam róluk :))). Így most van egy újabb programom, kitalálni, hogyan kell ezeket vba-ból kezelni. Ha elakadok, jelentkezem.
Nálam a számítógép installálása (XP) során telepítődött az Ariel Unicode MS Vegyes szimbólumok nevű alkészlete. Így amikor Vax megírta, hogy van ilyen, pár perc alatt megtaláltam. Szerintem a telepítő lemezről került a gépemre. És akkor talán onnan pótolható, ha nálad tényleg hiányzik ez az alkészlet.
Betöltöttem az Ariel Unicode MS-t. De nálam egyik kódhoz sem tartoznak sakk figurák. Elküldhetnéd a te készletedet, hogy megnézzem. Vagy add meg kérlek a linket, hogy te honnan töltötted le.
Sajnos a shaperange (ami a több shape kiválasztását lehetővé teszi) nem rendelkezik OnAction tulajdonsággal, de ugyanazt a makrót természetesen hozzárendelheted mindegyik shapehez (ez egyszer nyilván nem okoz gondot programból). Viszont akkor meg szét kell tudni választani ki hívta meg a makrót. Ezért én úgy csinálnám, hogy minden shape kap egy külön onaction makrót és a saját nevét - vagy más jellemzőjét - megadva hívja meg a közös makrót.
Alig hiszem, hogy a " " (szóköz) bármelyik gépnél is üres cellát eredményezne. Ha az érvényesítési listádban a szóközzel fűzöd össze az adatokat, akkor a szóköz benne marad úgy is, ha az összes többi változó nem tartalmaz értéket.
Így a listából kiválasztva, minimum a szóköz ottmarad a cellában. A cella csak úgy lehet üres ilyen esetben, ha a tartalmát törölték, vagy nem töltötték ki eleve. (És azt ránézésre nem látod, hogy szóköz van-e a cellában, vagy
üres(!!!), de a gép tudja!)
Ezért én inkább így kérdezném le: M5=HA(vagy(M4="",M4=" ");0;1).
segítséget szeretnék kérni egy problémámba. van egy összefűzés pl =M1&M2&" "&M3 ezt az összefüzést M4 legördülö listába (érvényesítés) használom. M5 pedig =HA(M4="";0;1) az egyik számítógépen müködik de a másikon a szóközt adatnak érzékeli ezért az üres cella értékeként 1-et hoz. Mit rontok el
Ay Ariel karakter ötletet köszönöm. Nem ismertem ezt a lehetőséget. Mint ahogy a figurahasználat módját sem.. Dehát ezek a feladatok nekem elsősorban arra valók, hogy feltárják a pótolandó hiányosságaimat.
Már sok éve nem foglalkoztam az Excellel, ezért csak ámulattal olvasgatok itt, de nagyon tetszett ez a sakk-projekted. Az ikonokon kívül, lehet talán egy másik út is. Nálam legalább is van egy karakterkészlet, amiben megvannak a sakk szimbólumok. Arial Unicode MS. Én beértem volna azzal is, ha ezeket sikerült volna mozgatni, de már sokat felejtettem abból a kevésből is, amit valaha tudtam.
Szóval korrigálok, a topleftcell primán müxik a pictures-sel is. Csak nem ártott volna még hozzáírni valamit. Mondjuk, hogy Address, ha a címére vagyok kiváncsi :)))).
Kösz! Majd megnézem. Bár nálam ezek az elemek picture-k és nem shape-k. Van köztük különbség? Az az igazság, hogy egyiket sem ismerem. Amikor elkezdtem a grafikus megoldás után kutakodni, akkor a picture-be botlottam bele, így hát azt próbálgattam használni. És mivel több minden sikerült vele, meg voltam elégedve magammal. Kicsit elhamarkodottan :))).
Azt már meg tudnám oldani, hogy a sakktáblán ne betűk hanem grafikus elemek lépkedjenek, de a lépésellenőzést csak a lépés bebillentyűzése utáni makróindítással tudnám aktiválni. Márpedig elegánsabb lenne, ha az értékelés figuraklikkelésre indulna. Csakhogy a Selection.Change csak a cellára való klikkelésre reagál, a képre klikkelésre nem. Az tán megoldható lenne, hogy olyan kicsi legyen a figura, hogy maradjon fedetlen cellafelület mellette, de hát ez is elég gagyi. Summa summárum, meg tudná valaki mondani, hogyan lehetne a Selection.Change-t rávenni, hogy figuraklikkre is induljon?
És egy pótkérdés. A cellában levő figura nevét le tudom kérdezni. De hogy melyik cellában van, azt nem. Hogy lehetne?
Azt szeretném kérdezni, hogy az alábbi a makróban miért hibás a Paste? A munkalapon rendben átrakja a Cells(1,5)-t a Cells(1,14)-be, majd kiirja hogy a Paste metódus hibás. És persze leáll. Ami ugyan az On Error Resume Next-tel áthidalható, de érdekelne a hiba oka.
Sub mozgat1() Dim a ''On Error Resume Next Range("a11:u11").Select a = Selection.Cells(1, 5) Selection.Cells(1, 5).Cut Range("a11:u11").Cells(1, 14) ActiveSheet.Paste End Sub
A copy jó ötlet ugyan, de nem oldotta meg a problémámat, mert az sem inditja el az értékelő makrókat. Azóta rájöttem, hogy a selection.change a clickindító. Kicsit sokáig tartott, mert mindig elbénáztam valamit. Vagy nem inditott, vagy akkor is elindult, amikor nem kellett volna :))). De végül csak összejött, és most már elfogadható biztonsággal fut. Ami által a sakkprogram is sokkal barátságosabb lett. Fel is rakom ide a linkjét, luzer tán hasznát veszi.
Merthpgy a dátum egy szám. És mivel olyan összefűzést csinálsz, ami egyébként helytelen (összefűzni alapból szöveget szöveggel) és simán hibát is eredményezhetne, az Excel kénytelen a saját feje után menni és valami implicit értelmezést csinálni.
Használd a szöveg(dátum;"éééé. hh. nn.") függvényt. Remélem, jól emlékszem a szintaxisra, ha nem, nézz utána a súgóban.
Igen, az jó lenne, de mivel sajnos "még" nem vagyok otthon az excelben így maga a függvény jó lett volna, de barátom lesz az internet! Köszönöm, innen elindulhatok...
Hát, nem vagy egy mindennapi figura (hogy a sakknál maradjak:)). A klikkeléses léptetést úgy oldottam meg, hogy copy-val kijelöltem a bábut - erről tudtam, hogy már választott, ahová lépett oda áttettem. De a copy csak arra van, hogy jelölje a bábválasztást (és a táblán látványos), ezt egy változóval is meg lehet oldani. Továbbá egyetlen selection_change esemény van benne. Viszonylag szépen működik, de váratlan hibák azért előjönnek - és még a mattot,pattot sem tudja.
Most egyenlőre félreteszem, mert az unokák fontosabbak.
A data.hu-ra felraktam neked egy sakkprogramot. Sajnos a figurák nem grafikusak, annak csinálási módját nem ismerem, ahhoz még minimum 2-3 nap kéne. A klikkeléses léptetéssel viszont próbálkoztam, de nem jött össze. Itt többen vannak, akiknek sepercbe kerülne összeütni. A léptetés ezért cellába írással történik amit a ctrl +shift +D makró ad át léptetési procedurának.
Többféle esemény indítási móddal is próbálkoztam, de azok se álltak össze. Ezért vannak a Munkalap1- modulban elvetélt és kikommentelt eseményinditók, valamint a makróban funkciójukat vesztett enableevents=true utasítások. Mert még tökölök velük egy kicsit.
Amit viszont tud:
kiértékeli, hogy szabályos volt-e a lépés
ha igen, megnézi, hogy aki lépett nem került-e sakkba,
Ha szabálytalan volt a lépés, kiirja hogy HIBÁS LÉPÉS, és nem lép tovább
ha minden rendben volt, átírja sakktáblát,
ha a lépés ütés volt, kiírja
A lépés után megnézi, hogy nem adott-e sakkot,ha igen, figyelmeztőnek ezt is kiírja
majd a munkalapon jegyzőkönyvezi a lépést
és végül kéri a következő lépést
A program ismeri a sáncolási és az enpassant feltételeket is.
Ez egy elég komoly kiértékelés, átlátni is nehéz. Ezért bőségesen kommenteltem a lépéseket, valmint írtam hozzá egy makróleírást. De még így is elég komplikált. Szerintem a tanárod megelégszik egy jóval egyszerübbel is. Ezért felraktam egy lebutitott változatot is. Ez csak annyit értékel, hogy a lépő figura a megadott cellán van-e és hogy nem egy azonos szinű figurat akar-e kiütni. Az elégségeshez elég lehet.
A data.hu-ra feltett zip-fileban tehát 3 file van:
Nekem volna egy, csak már két hete vívódok, hogy feltegyem-e:-) De erőt veszek magamon, és megkérdezem: Ha egy változó neve egy stringben áll rendelkezésemre, van-e mód megtudni programból a tartalmát? Régi emlékeim szerint például a Clipper programnyelven volt ilyen lehetőség.
Szia először is az elmúlt 10 napban már vizsgáim voltak és arra kellett készülnöm, hogy milyen szak ahhoz semmi közöd nincs, hogy vettek fel az egyetemre úgy, hogy írtam egy jó érettségit, másrészt nem vagyok hülye a matekhoz, bár mint a legtöbb ember esetében van olyan tárgy amiben jobb vagyok. Harmadszor nem fogom ott hagyni az egyetemet, mert igen is tetszik és van hozzá kedvem és szeretem az egy dolog, hogy rettentően hülye vagyok a VBA-hoz. Amúgy köszönöm mindenkinek a mérhetetlen nagy jóindulatot és megértést. Ja és én issol sikert szeretnék kívánni minden kedves hozzászólónak és engem fikázónak.
Hogyne mondtam volna. Azt mondtam, "gondolkodj, és írd össze". Tudod, a "gondolkodni" szó azt jelenti, hogy használod az elmédet, rendszerezel, összefüggéseket keresel. Nem azért lett volna erre szükség, hogy meglegyenek a szabályok, hanem azért, hogy forgasd az agyadban a sakkot, mélyülj el benne, értsd meg jobban. Hogy megérjen a fejedben valami idea, amit aztán algoritmusra lehet fordítani - mert minden jó program alapja a jó algoritmus.
Ehelyett ide másoltad a Chess Titans szabályleírását. Tudod, csak három gondom van ezzel.
1) Megmondtam neked, hogy akkor van esélyed a sikerre, ha tisztességgel beleteszed a munkát. A 23436-os hozzászólásban kaptunk is tőled erre egy félígéretet, vagy legalábbis szándéknyilatkozatot. Ehhez képest mi történt? Ctrl-c, Crtl-v. Ezt nevezed "sok erőfeszítésnek"?
2) Mivel - úgy tűnik - gondolatban semmit nem foglalkoztál a feladattal, továbbra is a nullánál tartunk. És közben eltelt több mint egy hét.
3) Ha neked egy hétre volt szükséged ahhoz, hogy bemásold ide az internetről a szabályokat, ezzel a tempóval évekbe fog telni a program megírása. December 29-ig semeddig nem fogunk eljutni.
Én így már nem látom értelmét tovább küzdeni. Ha akarod, még foglalkozhatunk a sakkprogramoddal, de határidőre nem fog elkészülni. Ha holnap megtáltosodnál, napi 12 óra megfeszített munkát beletennél, akkor talán. De így biztosan nem.
Szia, Te 10 napja jelentkeztél, hogy segítséget kérsz. Többen megmondták, hogy úgy biztosan nem megy, hogy valaki megcsinálja helyetted, és te eladd úgy, hogy te írtad. (Mellesleg a tanárok sem hülyék. Én ugyan nem vagyok tanár, de az első magyarázó mondatod után rájönnék, hogy azt a valamit nem te írtad)
Többen próbáltak rávezetni, hogy milyen gondolatmenet mentén fogj hozzá a feladathoz. És te most 10 nap elteltével, 1 héttel a határidő előtt eljutottál addig, hogy egy internetes oldalról néhány sort kimásoltál. Ennyi az egész? Ezt komolyan gondolod? Mit csináltál az elmúlt 10 napban? Diszkóba jártál, ittál, jobb esetben más vizsgákra készültél?
Egyáltalán milyen szak ez? Hogy vettek fel? Hiszen korábban már az is kiderült, hogy a matematikával is hadilábon állsz. Mert akinek a koordináta geometriáról annyi ismerete van, hogy az delta izé, hát azt nehéz ismeretnek nevezni. Márpedig a programozás nemigen megy matematikai alapok nélkül. Na és a szabatos fogalmazás, meg a teendők pontos meghatározása nélkül.
Szerintem add fel. Nem ezt a sakk programot, hanem az iskolát. Keress olyan szakmát, amihez érzéked, kedved és szorgalmad van. És abban sok sikert kívánok.
Így van. Ha a formon nincs látható vezérlő (mert mind elrejtetted), vagy egyáltalán nincs vezérlő rajta, csak akkor lehet maga a form a kiválasztott - illetve akkor hajtódik végre hozzá kapcsolódóan az eseménykezelés.
Viszont lehet, hogy az én angol értelmezésemmel van a gond (ami lehet, mert a felső középhaladó szintem messze nem a lehetséges maximum), de azóta is töprengek az idézet utolsó mondatának értelmén: " A form can have the focus only if it has no controls or all its visible controls are disabled."
Én ezt úgy fordítanám magamnak kissé szabadon, hogy Egy formon csak akkor lehet a focus, ha nincs hozzátartozó vezérlés, vagy valamennyi látható vezérlése hatástalanítva lett.
Így viszont nem tudom értelmezni. Ha az ellenkezője állna ott, hogy akkor veszítheti el a focust (amit mi is megcéloztunk az adott feladatban), akkor látnám a mondat értelmét.
Elnézést, hogy csak most válaszolok. Hiába, a karácsonyi készülődésben nem mindig jut hozzá az ember a kedvenc Exceléhez:-)
Szóval a SendKeys ("{TAB}") az eredeti programomban nem okozott gondot, mert a következő formon kezeltem. Csak ugyebár abból a böhöm nagy programból, amin dolgozom, ilyenkor csak egy kis részt modellezek, hogy csak a problémás rész látsszon. És ennek során elfeljtettem a közterület típusánál kezelni a dolgot. Így itt nekem is problémát okozott.
Természetesen a következő esemény kezelése után már rendben van.
Private Sub ComboKozterTip_Enter() LstKozterulet.Visible = False ' End Sub
A feltöltött munkafüzetben egy másik kérdés van. Azt jobbnak gondoltam vizuálisan. probálkozz lényszi többször rányomni a letöltésre vagy frissítsd az oldalt valami gubanc van Datáéknál a te feltöltésed is igy jött le. Az eddigi választ köszönöm
A rendezés azért csúszhatott el, mert valószínűleg kijelölted a rendezendő oszlop adatait. NE jelöld ki, csak állj valahol az oszlopban, mikor megnyomod az A-Z rendező ikont.
Hogy tudom meghatározni egy adott ponját nyomtatáshoz egy munkalapnak. Azt szeretném elérni egy zárólt munkalapnál, hogy amikor nyomtatni szeretném a munkalapot csak az előzőekben kijelölt részt nyomtethassam.
A tól Z-ig szeretnék egy táblázatot rendezni nevek alapján de az adatok összekutyulódnak. Az A oszlop neveket a többi L-ig a nevekhez tartozó adatokat tartalmaz 250 sorban.
Az első lépés a fehéré, utána a játékosok felváltva következnek.
Kattintson egy bábura, majd arra a mezőre, ahová lépni kíván vele. Amikor kiválasztja a használni kívánt bábut, a Chess Titans kék színnel jelöli meg a mezőket, ahová léphet vele, míg az ellenfél támadható bábuinak mezői piros színűre váltanak.
Bábu
Hogy lép
Király
Egy mezőt léphet bármelyik irányba: előre, hátra, oldalra és átlósan. A király a játék leggyengébb, de egyben legfontosabb bábuja.
Királynő
Tetszőleges számú üres mezőt léphet bármelyik irányba. A királynő a játék legerősebb bábuja.
Bástya
Tetszőleges számú üres mezőt léphet, de csak előre, hátra és oldalra.
Futó
Tetszőleges számú üres mezőt léphet, de csak átlósan.
Ló
Az L betű alakjának megfelelően léphet két mezőt bármelyik irányba, majd egy 90 fokos fordulat után még egyet. A ló igazi különcnek számít, úgy is, mint az egyedüli bábu, amelyik átugorhat a többi felett.
Gyalog
A legelső lépésnél kettő, a továbbiakban egy-egy mezőt léphet előre, kivéve az ellenfél bábujának leütésekor, amikor átlósan is mozoghat.
Saját bábu által elfoglalt mezőre lépni tilos. Ha az ellenfele által birtokolt egyik mezőre lép és így leüti az ott álló bábut, akkor ezzel el is távolítja azt a tábláról.
A matt akkor következik be, ha az ellenfél egyik bábuja úgy ejti csapdába a királyt, hogy közben el is zárja előle a menekülés útját. Ha ez megtörténik, a király mezője vörösben fénylik.
Különleges lépésekSáncolás
Ez a király védelmét szolgáló, megelőző manőver egyszerre két bábu mozgatását is igényli, amit a sakk szabályai csakis ilyenkor engednek meg. A sáncoláskor a király két lépést lép oldalra, miközben a bástya arra a helyre lép, amelyen a király áthaladt.
Minderre csak akkor nyílik mód, ha mindkét bábu még az eredeti helyén van, a király nincs sakkban, és más bábu sem akadályozza a műveletet. Ha a sáncolás lehetséges, a Chess Titans bíbor színnel jelöli meg a mezőt, ahová a király léphet. A lépés elvégzéséhez kattintson az adott mezőre.
Ütés menet közben
Ez a ritka, de hasznos támadó művelet - amely a francia „menet közben” kifejezésből ered - csak bizonyos körülmények esetén engedélyezett. Akkor történhet meg, ha az egyik gyalogja éppen az ötödik sorban tartózkodik, miközben az ellenfél gyalogjainak közeli sorából az egyik kezdő lépésként két mezővel előbbre lép.
Normális esetben az ellenfél gyalogja elkerülné az ütést (hiszen a gyalogok átlósan támadnak), de a menet közben történő ütés révén bábujával átlósan beléphet az üres mezőbe az ellenfél gyalogja mögé, ezáltal leütve azt. Mindez csak akkor szabályos, ha végrehajtása közvetlenül az ellenfél gyalogjának az első lépését követi.
Gyalog előléptetése
Vezesse végig egyik gyalogját a teljes táblán, és bástyává, lóvá, futóvá vagy akár királynővé is előléptetheti. Ez növeli a hadseregében lévő erős bábuk számát. Persze, többnyire a királynővé emelés a legjobb stratégia.
A magyarázat persze, mint majdnem minden esetben, ott van a help-ben.
KeyDown, KeyUp Events
"The KeyDown event occurs when the user presses a key on a running form while that form or a control on it has the focus. The KeyDown and KeyPress events alternate repeatedly until the user releases the key, at which time the KeyUp event occurs. The form or control with the focus receives all keystrokes. A form can have the focus only if it has no controls or all its visible controls are disabled."
Szóval a KeyPress azért akadt ki, mert további billentyűlenyomásokat várt.
Igazad van. A lapokhoz rendelt eseményvezérlésen kell módosítani.
Private Sub Worksheet_Change(ByVal Target As Range) Dim nev, lapnev$ Application.EnableEvents = False Application.ScreenUpdating = False
lapnev$ = ActiveSheet.Name nev = Target.Value If Not Intersect(Target, Range("Ter_1")) Is Nothing Then Torles nev, lapnev$ Range(Target.Address) = nev End If
Application.EnableEvents = True Application.ScreenUpdating = True End Sub
A cmdKivalaszt_click eseményben a cmdMegse.Visible = False sort az If Me.ActiveControl = CmdKivalaszt Then LstKozterulet.Visible = False után tenném be.
Az lstKozterulet_KeyPress -ben a SendKeys ("{TAB}") sort a cmdKiválaszt_click sor után kell betenni, nem a végére.
Az én elképzelésem nem jött be. Próbálkoztam többféle úton, de mindig oda lyukadtam ki, hogy a KeyPress eseménybe vissza kell térni, és nem megy.
Fferi ajánlott egy megoldást, én azt nem próbáltam, de mivel a lényegi része SendKeys-re alapoz, nem is próbálkoznék ilyesmivel, csak ha nincs más lehetőség. De most van. Én ezt úgy oldanám meg, hogy az utcanév kiválasztó listának adnék egy saját userform-ot. Talán kicsit bonyolultabb, de sokkal tisztább megoldás lenne.
Talán sikerült megtalálnom a megoldást. A problémát az okozta szerintem, hogy az éppen aktív vezérlőt szeretted volna láthatatlanná tenni, ezért nem tudott a megkezdett eseménykezelőbe visszatérni a program.
Ezért az eseménykezelést a következők szerint módosítottam:
A Private Sub lstKozterulet_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) eseménykezelő végére beírtam egy SendKeys ("{TAB}") utasítást, amivel átadja az aktívitást a következő vezérlőnek - ez a ComboKozterTip,
amihez felvettem a következő eseményt:
Private Sub ComboKozterTip_Enter()
LstKozterulet.Visible = False
cmdVissza.SetFocus
End Sub
A cmdKivalaszt_click eseményben módosítottam a listbox eltüntetést:
If Me.ActiveControl = CmdKivalaszt Then LstKozterulet.Visible = False
Így most akár enterrel, akár a kiválaszt gombbal lépnek ki, ugyanaz az eredmény látszik.
Annyit sikerült megállapítanom, hogy a Private Sub lstKozterulet_KeyPress()-ből direkben meghívott cmdKivalaszt_Click() esemény együtt okozza a galibát valószínűleg.
A hívás megtörténik, a cmdKivalaszt_Click() végrehajtódik az utolsó sorig, de utána feltételezhetően az lstKozterulet_KeyPress() -hez szeretne visszatérni a program, csakhogy az az objektum addigra már "eltűnik".
Próbálkoztam a Keypress kiváltásával, de eddig még nem sikerült.
A call Stack-ben látszik, hogy oda szeretne visszamenni és egyértelműen utána jön a "durva" hiba.
Ne haragudj de technikai okok miatt nem tudom elküldeni. Ezért megpróbálom még 1x leírni. Tehát az általad küldött dokumentumban is a J6 cella értéke 30. Amikor én megnéztem nem láttam függvényt, csak mintha beírtad volna a 30-at a cellába. Légyszíves írd az M2 munkalapra A1 cella =MA()+10 az M1 munkalapra =SZUM(M2 A1!) majd változtasd meg a +10 -et +5 re. Nálam az eredmény M2 munkalapon ma+10 és eltunt az M1 A1 cellából hiányzik =SZUM(M2 A1!)
Ezt nem láthatod, mivel nálam 3 lap van, az eredeti kérésednek megefelelően. Küldd el a füzetedet, mert a leírásodból számomra nem derül ki a problémád.
Nálam csal a 30 érték jelenik meg de a képlet sehol. Nekem van egy 4. munkalapom és arra a lapra hivatkozik egy a HA függvényben levő képlet. Amikor elkészíitem megjeleníti de ha változik a képletben egy érték már nem követi. Tehát ha visszamegyek a munkalapra a régi érték van ott de a képlet sehol. Ezt látom a te általad feltöltött munkafüzetben is. Köszönöm válaszod
Megtaláltam a fájlt. Tettem az első lapra egy képletet a J6-os cellába. Nem törlődik. Nem is szabad neki, mert a Torles makró az egyes lapokon csakis azokat a területeket nézi át és töröl, ha kell, amiket az auto_open makróban meghatároztunk. A lapokon ezeket a területeket háttérszínnel jelöltem.
Szia Delila10 újra egy kéréssel fordulok hozzád az érvénysítés töléssel kapcsolatban. Az általad megírt makrót használom de most jelentkezett egy olyan probléma, hogy szeretnék ezeken a munkalapokon függvényt elhelyezni de a makró nem csak a megadott cellákban törli az értéket hanem az egész munkalapon. tehát szeretnék egy ha függvényt elhelyezni egy érvényesítésen kívüli cellába. Amikor visszatérek a munkalaphoz már csak az érték van ott a függvény sehol. Remélem meg van még neked a feltöltött munkafüzet mert már nem lehet elérni a feltöltést és én most nem tudom feltölteni. Segítséged előre is köszönöm.
És még annyit hozzá, hogy feltehetőleg a hibával van összefüggésben, hogy annak jelentkezése után nem mindig tudok szabályosan kilépni az excelből, hanem csak a feladatkezelő segítségével.
Elnézést kérek. Elfelejtettem beállítani a megosztást mindenkivel a link birtokáben. És mivel magamnak sikerült ellenőriznem a letöltést, nyugodt voltam. Nyugodt hülye:-)))
Megcsináltam a mintát, és feltöltöttem ide: https://drive.google.com/file/d/0B95-udqs_cyXYTJrelVWM3ZFNms/edit?usp=sharing
A form fejlécébe is beírtam a jelenséget, de itt is megírom:
A hiba akkor jelentkezik, ha kerületnek az 1. kerületet választjuk (101-el kezdődő irányítószámmal), majd az utcalista (közterületlista) megjelenésekor ráállunk valamelyik kiválasztandó utcára (közterületre), és az Enter gombbal lépünk tovább.
Hogyne. Néhány hónapja, amikor megtudtam, hogy a Formokon nem működik a dolog, magam is ezt találtam meg, mint a jelenség leírását. Akkor vezettem be az előbb említett Allowevents változót.
Szia, köszönöm. Én is ezt alkalmaztam. Bevezettem a formokon egy AllowEvents változót, amit inicializáskor True-ra állítok, és innen kezdve ugyanúgy használom, mint az EnableEvents-et. Annyi különbséggel, hogy az események első sorába írom, hogy: If not AllowEvents Then Exit Sub.
Viszont erről a hívásveremről nem tudtam. Azt még a jó harminc évvel ezelőtti Assembler ismeretimből sejtettem, hogy itt a veremkezeléssel lehet a probléma, de nem gondoltam, hogy meg is lehet nézni. Meg fogom nézni rövidesen.
Amúgy azt sejtem még, hogy egy adott vezérlés Visible = False-ra állítása azt még megengedi, hogy az adott részlet End Sub parancsát végrehajtsa, de már egy második szintre nem tud visszaugrani.
Amint hozzájutok (szerintem holnap), készítek egyszerűsített tesztprogramot rá, elküldöm, és bogarászok tovább.
A debuggerben a hívásveremben látod, hogy hol akadt fenn a program? Milyen hívások maradtak függőben?
Annak ismeretében lehet "kerülőutat" csinálni, amivel elérheted, hogy ne fusson le az eseményben definiált rész.
Én általában valamilyen változót szoktam használni annak jelölésére, hogy kell-e az adott esemény belső részét futtatni, vagy sem, mivel az elég "ártalmas", ha egy másik eseményből kilőjük azt az objektumot, aminek folyományaként oda kerültünk.
Újabb gondom akadt a UserFormomon. Egy ponton bizonyos feltételektől függően vagy szabadon textboxban, vagy kész listából listboxban kell beírni az adatokat. Azt szeretném, hogy a listbox megjelenése csak átmeneti legyen a kiválasztás idejére, és erre az időre kerüljön a képernyőn a textbox helyére (takarja el azt), majd a kiválasztott adat kerüljön a textboxba, és a képernyőn most már a kitöltött textbox látszódjon.
A lényegét meg is tudom oldani, a problémám a befejezéssel van. Azt nem tudom elérni, hogy miután a listboxból kiválasztott adat átkerült a textboxba a listbox tűnjön el. Természetesen az eltüntetés (visible=False) ideális helye a listbox eseményvezérlése lenne. De akárhogy ügyeskedek, az eseményvezérlőből kilépve többnyire „a meghívott objektum levált az ügyfeleiről” hibaüzenet fogad. Jobb híján végül egy csúnya SendKeys ("{TAB}") paranccsal léptetek a következő vezérlésre, és annak az Enter eseményében tudom szabályosan lezárni az – így már nem aktív – listboxot.
Kérdésem, hogy van megoldás arra, hogy a még aktív listboxban kikapcsoljam (eltüntessem) saját magát?
Hogy bonyolítsam a dolgot megjegyzem, hogy bizonyos körülmények között ez sikerül. A hiba akkor jelentkezik, ha a kikapcsolás után maradt még függőben végre nem hajtott eseményvezérlő. Tehát pontosítva a kérdést, az lenne jó, ha a kikapcsolás mellett azt is el tudnám érni, hogy hagyja figyelmen kívül a még hátralévő eseményeket.
Szerintem semmiben, de nekem magának az eseménykezelőnek a meghívása volt a fő gond. (Mivel eddig csak "sima" makrókat hívtam meg kivülről - az application.run-nal - eseménykezelőt nem. Ez nem ment a hagyományos - eddig általam alkalmazott - módon.)
Valami ilyesmi, nekem működik. Megjegyzés: ez a makró igazából nem kattint, csak meghívja azt a makrót, ami akkor futna le, ha a user duplakattintana a megadott cellába.
-----------------
Option Explicit
Sub test1()
'munkafüzet elérési útvonala, amibe "kattintani" akarsz: Const MyWb As String = "C:Book2.xls" 'változó, amiben a megnyitott munkafüzetet tároljuk: Dim MyWbook As Workbook
'megnyitjuk, hozzárendeljük a változóhoz Set MyWbook = Workbooks.Open(MyWb)
'sheet1 nevű munkalapon az A1 cellába "duplakattint" Call MyWbook.Workbook_SheetBeforeDoubleClick(MyWbook.Sheets("Sheet1"), Range("A1"), False)
'vedd ki az aposztrófot, ha utána be is akarod zárni egyből, mentés nélkül 'MyWbook.Close False End Sub
Ha az új munkalap beszúrása után bekapcsolod a makrórögzítőt, a munkalap áthelyezése után - még a mentés előtt - pedig kikapcsolod, akkor csak annyi dolgod marad, hogy a szűrőtartományba beírod az új ügyfél nevét, majd elindítod a makrót. Az eredmény fájlt pedig elmented és becsukod.
További egyszerűsítés (bonyolítás?). Az ügyfelek nevét sem kell beírnod ha az ügyfelek oszlopát átmásolod egy új oszlopba az adatoktól - és az előbb beírt szűrőtől - jobbra (egy oszlop kihagyásával). Ezután kijelölöd ezt az oszlopot, az adatok - ismétlődések eltávolítása opcióval megmaradnak az egyedi ügyfélnevek.
Most kiválasztod azt a cellát, ahova az előbb az ügyfélneveket írtuk. Ezután adatok - érvényesítés - érvényesítés, a megjelenő párbeszéd ablakban kiválasztod:
a megengedve sorban a listát, a forrás sorba pedig kiválasztod az előzőleg megtisztított ügyféllistát tartalmazó cellákat.
Ok után kész is a komfortos lista.
Csak kiválasztod az ügyfelet és elindítod a makrót.
Illetve, hogy fokozzuk még: A makróhoz hozzárendelhetsz egy billentyűkombinációt és már futtathatod is. (Fejlesztőeszközök - makrók - a makró kiválasztása után egyebek és itt hozzárendelheted a billentyűt.)
Makró nélkül egy kattintásra biztosan nem megy. De elég egyszerűen megoldható pár kattintással:
Feltételezés: A munkalapon az első sorban fejlécek vannak, utána jönnek az adatok.
Lépések: Az adatok után egy üres oszlopot hagyj ki. A következő oszlop első sorába írd be az ügyfelek nevét tartalmazó oszlop fejlécét.
Az alatta levő sorba a szűrni kivánt ügyfél nevét.
Ha nincs másik munkalap, akkor szúrj be egy üres munkalapot.
Ezen az új munkalapon állva válaszd az adatok - rendezés és szűrés - speciális opciót.
Lehet, hogy az excel kicsit okvetetlenkedni fog, hogy szerinte nincsenek adatok, de ezzel ne törődj (bár talán 2010-ben már nem tesz ilyet.)
A megjelenő irányított szűrés párbeszéd ablakot az alábbiak szerint töltsd ki (kiválasztással):
A listatartományhoz jelöld ki az adatokat tartalmazó munkalap adatrészét.
A szűrőtartományhoz jelöld ki a az adatokat tartalmazó munkalapon az előzőleg beírt fejléc+ügyfél nevét tartalmazó cellákat.
Jelöld be a más helyre másolja kapcsolót.
Ezután jelöld ki az üres munkalap A1 celláját.
Ha minden igaz, akkor az adott ügyfél számláinak adatai jelennek meg.
Most a munkalapfülre kattints a jobb egérgombbal. A megjelenő helyi menüből válaszd az áthelyezés vagy másolás opciót és utána a melyik munkafüzetbe lenyílónál válaszd az új munkafüzetet.
Jelöld be a legyen másolat négyzetet.
Ha leokézod, akkor az új munkafüzetet elmentheted tetszőleges néven és bezárhatod.
A további ügyfeleket már egyszerűen megoldhatod.
Az adat munkalapon átírod az ügyfél nevét. Utána már nem kell ismét munkalapot beszúrni, csak az új munkalapon kiválasztani az adatok - rendezés és szűrés - speciális opciót. A párbeszéd ablak elvileg már a helyes adatokat tartalmazza, csak le kell okézni.
Hidd el, leírni bonyolultabb volt, mint végigcsinálni.
sziasztok, lehet, hogy elsőre nem lesz teljesen értelmes, amit kérdezni szeretnék, de az excel súgójával nem jutottam dűlőre.
2010-es excellel dolgozom.
van egy munkalapom, amiben nyilvántartok késedelmes fizetéseket. az első oszlop a partner neve (annyiszor, ahány számlája van nyitva), a többi oszlop pedig az egyéb infó, késedelmes napok száma, stbstb mindben van szűrő.
soronként ugye a számlák vannak.
azt szeretném, ha az első oszlopban a partner nevére szűrve és utána egy "listáz" vagy akármilyen kattintható "gombra" nyomva készülne csak arról a partnerről egy új excel fájl.
tehát kimutatás szerűen készülne el, de valószínűleg makró kell hozzá. amit én még soha nem csináltam :)
Köszi, hogy foglalkoztál a problémámmal. Közelebb haladtam a megoldáshoz, de gondot még az okoz, hogy nem egy fájlban van a kattintós munkalap és az őt meghívó program, hanem kettőben. Ahonnan a programot kattintással meg kellene hívni, abban a fájlban a "ThisWorkbook" lapon van a program, amire a Call utasításban nem tudok hivatkozni.
Miért priviben? Nem lehetne a data.hu-ra, vagy a google drive-on elhelyezve, megosztva az adott fájl letöltőlinkjét, hogy akit érdekel a téma, az letölthesse?
Közben rájöttem, hogy mit csinálsz és az is remek:
A céltartomány első sorába azon oszlopok fejléceit írod be, amelyeket szeretnél, hogy odakerüljenek, utána azokat a cellákat jelölöd ki "hova másoljának". És a poén, hogy annak az oszlopnak, amit szűrsz, nem is kell benne lennie.
Világos, hogy ugyanarról beszélünk, ugyanazzal az eredménnyel, csakhogy én nem egészen értem, hogy te hogy csinálod és szeretném megérteni, mert hátha praktikusabb az én módszeremnél. Pl. azt ahogy te szűröd ki az ismétlődéseket egy oszlopból, ahol maga az oszlop fejléce a szűrő tartomány, nem ismertem, és tényleg jó.
A mintaképemen azért csak az a 3 oszlop szerepel az eredménytáblázatban, mert csak azt a 3-mat írtam fejlécébe. Ha 5-t írtam vona akkor 5 lenne, ha 1-t akkor csak 1.
üdv
ps. Az előző hsz-ben írtam, hogy a kritériumtartományt előre is ki lehet jelölni és utólag beleírni a kritériumokat. Azóta kapcsoltam, hogy nem lehet. Attól hogy nekem makrósítva van a szűrés fix kritériumtartománnyal, attól az csak nekem fix, a szűrőnek nem, neki minden szűrésnél újra és újra definiálódik.
Szerintem ugyanarról beszélünk csak kétféleképpen, de még az eredmény is ugyanaz.
Nyilván kell egy lista, amit valamilyen módon szűrni akarsz - és az eredmény máshol akarod látni.
Egyértelmű, hogy ehhez szükség van a szűrési feltételekre. A szűrési feltételeket pedig előre be kell írnod valahova, ez lesz a criteriarange a makróban, a párbeszédpanelben pedig ezt fogod bejelölni szűrőtartománynak.
A szűrőtartomány (szűrési feltételek) pedig az első sorban tartalmazzák a fejlécet, az alattuk levő sorokban pedig a feltételeket. (Mintha a betett képen is ezt látnám!)
Viszont ha egy oszlopból ki akarod szűrni az ismétlődéseket, akkor a szűrőtartomány lehet maga az oszlop fejléc cellája egyedül. Nyilván, akkor a csak egyedi értékek megjelelölése be van jelölve.
Ami a zavart okozhatta a következő: Én a listákat általában az első sortól kezdve teszem be a munkalapokra, ahol az első sor a fejléc. Eamiatt gondoltam arra, hogy ugyanabba az oszlopba csak úgy tudsz szűrőfeltételt is tenni, ha beszúrsz elé sor(oka)t. Természetesen a szűrófeltételek az adatok alatt is lehetnek,de messze nem kell ugyanazokban az oszlopokban lenniük. Én általában az adatok melletti részt használom.
Másrészt viszont nem értem, hogy a mintaképeden miért csak ez a 3 oszlop szerepel. Valószínűleg a szűrőtartomány nem látható része a bűnös.
Valamit nagyon másképp értelmezünk ennél a szűrőnél.
Nem értem például miért tartod fontosnak megjegyezni, hogy a szűrési kritériumoknak a kritérium területen kell lenniük. Amikor az nem is tud máshol lenni. Szerintem ugyanis a kritérium terület úgy keletkezik, hogy kijelölöd a szűrési kritériumokat. Persze lehet fordítva is csinálni, hogy előre jelölöd ki a kritérium tartományt, akár munkalapszélességben. És ebbe utólag írsz be néhány kritériumot.
Én semmi olyat nem javasoltam, amiben a fejlécek egy részét törölni kéne. Sok szűrést csináltam már, de fejlécrészt emiatt még sosem kellett törölnöm.
Új sort sem kell beszúrni. Így nem okoz gondot hogy ezzel nem lehet kritériumot is megadni.
És végül: az átvinni nem kivánt oszlop fejlécét én nem szoktam törölni, hanem csak egészen egyszerűen nem írom be ezeket a szűrési eredménytáblázat fejlécébe.
Mivel egészen biztosan másképp látjuk a szűrést, a jobb érthetőség kedvéért ide rakok 2 képet egy mintapéldáról.
Mármint tehát itt két excel fájlról van szó, és az egyikben legyen olyan programrész, ami a másik fájl munkalapján duplán klikkel. De nem egyszerűen csak meghívja az eseménykezelőt, hanem maga a munkalap higgye azt, hogy a felhasználó duplán kattintott. Jól foglaltam össze?
Azt szeretném kérdezni, hogy egy double clicket hogy tudnék makróból előidézni?
Van egy excel lapom, ami mögött van egy before_double_click makróm. Ezt szeretném egy másik programból meghívni úgy, mintha kézzel rákkatintanék erre az excel lapra.
Tudom, hogy egy egyszerű megoldás az, ha a másik programból meghívom ennek az excel lapnak a makróját, de bizonyos okok miatt jobb lenne programból clickelni.
Az előző hozzászólásom egy kicsit hibás, mert a szűrési kritériumokat csak a kritérium területen lehet elhelyezni!
A Te javaslatodhoz a fejlécek egy részét törölni kell, vagy új sort kell beszúrni a fejlécek elé és abba beírni a fejlécet, de ezzel még nem lehet kritériumot is megadni,csak a teljes oszlopot tudod átmásolni!
Tehát mégegyszer:
Kell egy kritérium terület, ahol az első sor a szűrendő oszlopok fejléce, a további sorok pedig a szűrési feltételeket tartalmazzák.
A szűrendő területnek egybefüggőnek kell lennie
de - és itt jön a Te javaslatod kombinálása - ha az átvinni nem kívánt oszlop fejlécét kitöröljük, akkor a szűrt átvitel történik meg és üresen hagyja a fejléc nélküli oszlopokat.
Így van, de ha nem akarod a teljes oszlopot átvinni, akkor alá beírhatod a szűrés kritériumát is, ami több oszlopnál is működik és illetve vagy feltételként, attól függően, hogy melyik sorba írtad a kritérium területen!
Advanced filterrel úgy kell szűrni több oszlopra, hogy a továbbitandó oszlopok fejcímeit elhelyezed a szűrendő terület első sorába, majd ezt a sort adod meg hogy hova szűrjön,
Előzőleg elég sok órát eltöltöttem a megoldás keresésével, és nem találtam ilyen lehetőséget. Ettől persze még lehet, hogy van. De majd megnézem még egyszer.
Off: Ami a 2010-et illeti, napok kérdése, hogy nekivágjak. Karácsony után várhatóan megpróbálok áttérni az új verziókra. Win 8.1 Enterprize és Office 2010. Gondolom, hogy az első néhány hét nagy szívás lesz külön-külön is mindkettővel, de aztán majd csak megszokom.
Egy szűréssel kapcsolatban van egy kis problémám. Pontosabban megoldottam, de azt hiszem nagyon fapadosan.
AdvancedFilterrel szűrtem egy munkalap adatait az állomány egyik oszlopa szerint. De szükségem volt a vele párhuzamos két másik oszlopra is, így nem tudtam más helyre irányítani a szűrést.
(Konkrétan egy utcalista későbbi keresésre történő előkészítéséről van szó, ahol majd egyben keres a felhasználó a közterület nevére - pl. Kodály - és típusára - pl. Körönd -, vagy Nyúl utca stb.). Azonban megtalálva a teljes kifejezést nem bízom benne, hogy a típus mindig egyetlen szó lesz, így nem merem utólag szétszedni a stringet. Ezért két másik oszlop tartalmazza őket külön-külön is.)
Ugyanakkor úgy vettem észre, hogy kereséskor többször rálépve a szűrt területre, van amikor a program elveszíti, és nem látja a szűrést. Lehet, hogy ezt rosszul figyeltem meg, de inkább biztosra akartam menni, és azt akartam elérni, hogy a szűrt adatok kerüljenek leválogatva a munkalapra.
Ezért a következő megoldást alkalmaztam:
Application.DisplayAlerts = False ’ hogy ne kérjen megerősítést törléskor
With ws.Range(ws.Cells(2, 1), ws.Cells(utolsosor, utolsooszlop))
.Rows.Copy ws.Cells(utolsosor + 1, 1) ' A látható sorok átmásolása az utolsó sor mögé
ws.ShowAllData ' Láthatóvá teszünk mindent, másképp zavar lesz, ha a végén nem látható sorok voltak
.Rows.Delete ' a szűrt tartományt töröljük
End With
Application.DisplayAlerts = True
A megoldás működik, megfelelően gyors is, de borzasztóan nehézkesnek érzem. Létezik elegánsabb megoldás?
Abban szeretném a tanácsotokat kérni, miként lehetne megoldani, hogy a munkalapon egy meghatározott oszlopban a számok tizedesjele ne a rendszerbeállítás szerinti (pl. ',') legyen, hanem a '.'! Nem megváltoztatni szeretném az Excel (vagy Windows) beállításait (bár úgy megadhatnám, hogy mi legyen a tizedes elválasztó, igaz, ez az egész munkalapra érvényes lesz), hanem a kérdéses oszlopra tudnék-e olyan cellaformázási beállítást alkalmazni, ami csak abban az oszlopban változtatná meg (ha szükséges) a tizedesjelre vonatkozó területi beállításokat? Tehát minden más oszlopban az aktuális területi beállítás szerinti tizedesjel szerepelne, de abban a bizonyos oszlopban mindig '.' lenne a tizedes elválasztó. (Nagyon kerülő megoldást tudok, ha összefűzöm az egészrészt a tizedesponttal, majd a tört részből a megfelelő számú tizedes számjegyet, de hátha lenne ettől egyszerűbb megoldás.)
"Mondok egy példát. Legyen a kiindulás állapot az, hogy az Y tengely fentről lefelé nő, mint a munkalapon a sorok számozása, és a sötét oldal a tábla tetejéről indul. Ekkor:
Ennél több nem is kell ahhoz, hogy megfogalmazd a programban figyelembe veendő lépési korlátozásokat. Inkább a fínomságokra érdemes még odafigyelni, ami elsőre elkerülheti a figyelmedet. Például, ha az ellenfél sakkot adott, akkor minden lépés érvénytelen, aminek az eredményeként a király sakkban marad. És ennek ellentéteként minden olyan lépés érvénytelen amelynek eredményeképp a király sakkba kerülne (Tehát, ha a királyt a sakk elől védő bábút mozdítaná el a játékos).
Aztán van még két speciális lépés, amiről szintén nem szabad megfeledkezni. Az egyik az en passant, azaz az anpassz, a másik a rosálás. Az utóbbinál azt kell tudni, hogy királylépésnek számít. Tehát ha a - mostanáig mozdulatlan - király kettőt lép balra, vagy jobbra, és a mellette lévő bástya sem mozdult még, akkor az szabályos lépés, amire a programnak a bástyát át kell emelnie a királyon.
Sakkozni egyébként tudsz? Illetve pontosabban fogalmazva tudod a szabályokat? Mert szerintem első lépésként azt kellene nagyon alaposan összeszedned, amit játék közben akár öntudatlanul is alkalmazol. Például, hogy ha a bástya vagy a futó útjában valamilyen saját bábú áll, akkor csak az azt megelőző kockára lehet lépni. Ha ellenfélé áll ott, akkor szintén, de annyival egészül ki, hogy le is ütheted. Mögé egyik esetben sem kerülhetsz. A királynő a kettő kombinációja. A ló esetében ilyen megkötés nincs. Gyalognál különválik a 2 (7) mezőről történő lépés, és az ütéssel is egész más a helyzet. A király meg csak akkor üthet, ha ezáltal nem kerül sakkba. És így tovább. Szóval ezeket kellene először megfogalmaznod nagyon szabatosan (nem úgy, mint az első bejelentkezésedkor, hogy „...segítene nekem sakkot csinálni...”).
Ugyanis a programozás két dologról szól. Az első a megoldandó feladat nagyon precíz megfogalmazása, lehetőleg minél elemibb részekre bontva, végiggondolva az apróbb buktatókat, hibalehetőségeket. És lehetőleg nem kifelejtve a megfogalmazásból azokat a dolgokat, amiket egyébként általában evidensnek tekintünk. Ugyanis a számítógép számára nincs evidencia. Neki mindent el kell magyarázni. Úgy sejtem, hogy Jimmy most ezt várja tőled, hogy aztán segíthessen a továbblépésben.
És csak ha ez megvan, akkor jöhet a második rész - ami nemegyszer könnyebb az elsőnél – a kódolás, azaz a programkód megírása. Bonyolultabb feladatoknál a kettő közé beiktatható egy folyamatábra elkészítése, mert a kódolásnál könnyen eltévedhet az ember.
Szóval jó munkát! Ha ez nem megy, akkor idén esélytelen a dolog.
Ja és egy off javaslat itt a beszélgetésnél: Ha itt válaszolsz valakinek, lehetőleg ne az 'új hozzászólás' gombot használd, hanem a hozzászólás felső sorában a válasz gombot (a visszafelé hajló nyíl). Ugyanis akkor rögtön látszik, hogy éppen kinek válaszolsz, és ez megkönnyíti a beszélgetés követését.
Igen sakk programmot szeretnék, nem kicsi hanem nagy erőfeszítés árán mert ahogy már írtam sajnos semmi tudásom sincs. Ja és sajnos nincs más ötletem. :)
Utólag szeretném előrebocsátani, hogy én azért foglalkozom most a kérdéseddel, mert megbántam a tegnapi kirohanásomat, és mert az email címed alapján valószínűleg lány vagy, és a hölgyeket egy férfiembernek tisztelni és segíteni illik. De a tartalmi kérdésben nem változott a véleményem: ebből a projektből akkor lesz eredmény, ha dolgozol rajta. Én nem fogom helyetted megcsinálni, csak segítek, a szó valódi értelmében. December 29-ig még van két hét (amit nevezzünk inkább egynek), szerintem van esélye, hogy elkészül. De el kell döntened, hogy mit akarsz: sakkprogramot némi erőfeszítés árán, vagy van jobb ötleted, amiben én nem szerepelek.
Ez egy villámválasz volt, de én nem ezt várom tőled. Gondolkodj, és írd össze. Tételesen.
Ha a lépő bábu sötét bástya, akkor milyen feltételeknek kell teljesülni, hogy a lépés szabályos legyen. Ha a lépő bábu sötét huszár, akkor akkor milyen feltételeknek kell teljesülni, hogy a lépés szabályos legyen. stb. stb. Teljes körű lista kell, nagyjából úgy, ahogy a sötét gyalog esetében leírtam az előbb.
Az nem baj, ha a feltételek közt olyan is van, amit nem tudsz képletben megfogalmazni, számszerűsíteni. Ha pl. azt mondod: "meg kell vizsgálni, hogy a bábu lépése útjában van-e másik bábu", de nem tudod, hogyan lehet ezt a vizsgálatot megvalósítani, akkor az egy fekete doboz. Tudjuk mit csinál, de nem tudjuk hogyan. Pontosabban MÉG nem tudjuk. De majd az is meglesz előbb-utóbb.
Hát szerintem először is meg kéne vizsgàlni azt, hogy azon a helyen ahova lépni szertnénk van e egy màsik bábu, aztàn a lépő bàbut megkéne vizsgàlni, hogy szabályos e a lépés vagy igazából nem tudom
Belegondoltam, és arra jutottam, hogy talán még egyszerűbb is lenne grafikus felülettel. De ezt most egyelőre hagyjuk, a megjelenítéssel majd később foglalkozzunk. Most inkább nézzük meg a "core" funkciót.
Tegyük fel, hogy a sakktábla egy kétdimenziós koordinátarendszer, X éy Y tengellyel. Tegyük fel, hogy X0,Y0 koordinátákon áll egy bábu, amit az egyik játékos mozgatni akar X1,Y1 koordinátákba. (X1 nem feltétlenül különbözik X0-tól, és Y1 nem feltétlenül különbözik Y0-tól, de lagalább az egyik koordinátának változnia kell, különben nincs mozgás.) A cél az, hogy összerakjunk egy függvényt, ami visszaadja egy tervezett bábulépésről, hogy az érvényes vagy sem. Ehhez kell egy jó algoritmus. Gondolkodj, és írd össze, hogy szerinted milyen szempontból kellene megnézni a lépést. Milyen vizsgálatokat kell elvégezni, hogy az algoritmus megtalálja a tervezett lépés érvénytelenítéét okozó akadályokat, szabálytalanságokat?
Mondok egy példát. Legyen a kiindulás állapot az, hogy az Y tengely fentről lefelé nő, mint a munkalapon a sorok számozása, és a sötét oldal a tábla tetejéről indul. Ekkor:
HA a bábu sötét gyalog
ÉS delta X = 0
ÉS delta Y = 1
ÉS X0,Y1 koordinátákon nem másik bábu
ÉS Y1<=8
AKKOR az egy szabályos lépés.
Szedj össze mindent, ami eszedbe jut, nem baj, ha nem teljes a lista, majd kiegészítjük.
Olyan nagyon igényesnek nem kell lennie szerintem, de azért egy sakk tablára kéne hasonlítani de szerintem a bábukat például szerintem helyettesíthetik betűk
Pont tegnap voltam egy tréningen, ahol elmondták, hogy a passzív ember kihozza másokból az állatot, magára húzza amazok agresszióját. Azt mondta a tréner, hogy vannak akik úgy mennek végig az utcán, hogy szinte kedvünk támadna fejbevágni. Ezek az emberek gyakorlatilag fejbe vágatják magukat, és midenkiből kiváltják ezt a reakciót.
Én persze nem hittem el, hogy ennyire ösztönlény lennék. És erre tessék...
És mit gondolsz, mi az elvárás: grafikus megjelenítés, ami úgy is néz ki, mint egy sakktábla, vagy elég egy 8x8-as cellatartomány valamelyik munkalapon, ahol betűk/számok jelképezik a sakkfigurákat? Szóval mennyire kell igényesnek lennie?
Ahol eleve úgy kezdik az oktatást mintha már mindenki tudna programozni, ott valszeg mindenki tud programozni. Pont egy ilyen helyre kellett jelentkezned?
Képzeld el megnéztem azokat a kész programmokat amiket ide írtak azok akik ahogy te írtad JÓFEJEK, és sajnos nem sokkal jutottam közelebb a megoldáshoz/megértéshez, leadták az alapokat, de eleve úgy kezdték az oktatást mintha már mindenki tudna programozni pedig ez nem tanultam ezt egyeltalán és nem az alatt az 5 óra alatt amit tartottak ezzel kapcsolatban nem lettem okosabb programozás terén. Amúgy köszi a mérhetetlen jóindulatot, ja és melesleg az email címem ikerkriszti@freemail.hu
Figyelj, bahátom. Idejössz egy olyan kéréssel, ami alapjaiban sérti a szakmai fórumok íratlan szabályait. A szavaidból egyértelműen kiderül, hogy fingod nincs az egészről. Ha ez egy egyetemi házi feladat, akkor nyilván órán leadták az elkészítéséhez szükséges anyagot, vagy legalább az alapokat, hogy elindulhass. Ha most olyan szinten vagy, hogy egy értelmes kérdést nem tudsz feltenni a témával kapcsolatban, akkor mi a francot csináltál egész félévben?
Végig azon sírsz itt, hogy segítsünk, közben egy szalmaszálat nem mozdítasz meg a siker érdekében. Előbb tán valamit le kéne tenni az asztalra, nem? Vagy nálad az a segítség definíciója, hogy "csináld meg kérlek az egészet helyettem"?
Mindezek dacára kapsz kész megoldást, mert vannak itt jó fejek is (nem én, de vannak). Gondoltam, majd biztos megnézed, és megpróbálod megérteni, és majd kérdezel, ha nem sikerül. De nem, te csak tovább nyüszítesz, még arra sem vagy hajlandó, hogy a kész megoldást megnézd. Hát mit vársz? Küldjük el elmail-ben az excel fájlt a sakkprogrammal? (És még csak az email címed sem publikus.)
Ha egy szikrányi eltökéltséget éreznék benned, hogy hozzáteszed a magad részét a munkához, azt mondanám: oké, mindenki hibázik, de adjuk meg az esélyt, hogy helyrehozza. De azok alapján, ami hozzáállásodból lejön, szerintem Taigetoszba való vagy. Uff.
Volt régebben részem hasonlóban... Jól lehet vele keresni... Így utólag bánom, mert tudatlanul jönnek ki az egyetemről, semmire kapnak diplomát... (Bár amúgy is)
Egyrészt rossz helyen keresgélsz, szerintem ez nem az a fórum, ami neked kell. Másrészt ez BTK annak is, aki elvégzi, és annak is aki kéri. Nézz utána.
Egyébként találsz kódokat neten, csak rá ne keressenek a tanárok...
Azt hittem, ilyenkor már vége a szemeszternek... Nem olyan nehéz feladat, viszont elég etikátlan mással megcsináltatni. Nem kéne lesüllyedni a volt államfőnk szintjére.
Mindenesetre pár tipp, ha esetleg becsületesen magad csinálnád meg:
- 8x8-as cellatömb a sakktábla, négyzet alakú mezőkre szabva
- a bábuk lehetnének mondjuk cellával megegyező méretű képek
- esemény makrók szabályozhatnák a lépéseket (pl. ha rákattintasz az egyik bábu képére az triggerel egy makrót ami beszínezi azt a cellát és utána egy másik cellára kattintással léphetnél)
- más esemény makrók szabályozhatnák azt, hogy mikor van vége a játéknak, vagy hogy hova lehet lépni és hova nem
- lehetne egy log, amit a program vezet, ami a lépéseket tartalmazza
Ezen felül még egy rakás dologgal lehetne csicsázni: stopper, lépésvisszavonás, lépéslehetőségek beszínezése, akármi.
Oldjuk meg valamilyen módon az Excelben, hogy a munkalapon valamilyen módon jelzett sakkbábukkal játszani tudjon egymással 2 személy. Oldjuk meg, hogy a játék kezelje a sakkhoz tartozó lépéseket és szabályokat (aki ismeri a jelenlegi legfrissebb szabályt, azt is implementálhatja) Ezt kaptam mint feladatot az egyetemen beadandónak
Lefordítom Jimmy kérdését: amíg meg nem mondod pontosan, hogy mit akarsz, addig vagy senki nem csinálja meg neked, vagy megcsinálja, amit gondol, te meg nem azt kapod, amit akartál, mégis hálálhatod megfele bármivel.
Sziasztok egy nagyon fontos életbe vágó kérésem lenne valaki aki tud vba-ban programozni és tudom, hogy nagy kérés, de segítene nekem sakkot csinálni azt nagyon meghálálnám. ("bármivel")
Nagyon fontos nincs más reményem ezen a forum kivűl.
A következő kérdésem nem igazán Excel ismereteket kíván, de hátha tudja valaki: Amikor a Windows XP alatt keresek, akkor lehetőség van arra, hogy az "egy szó, vagy kifejezés a fájlban" opciót használjam. Azon már szomorúan túltettem magam, hogy az Excel táblázatokban található számokra ez nem érvényes, nyilván a számábrázolás sajátosságai miatt.
Ugyanakkor néha előfordul, hogy egy VBA forrásszöveg részletre emlékszem, de arra már nem, hogy azt pontosan melyik programomban használtam, viszont szeretném előbányászni. Sajnos tapasztalatom szerint erre sem terjed ki a keresés. Tud valaki lehetőséget erre? Néha nagyon hasznos lenne.
Ellenőriztem a dolgot, és ez valóban megoldotta. Mivel a TakeFocusOnClick=False hatására a vezérlés ugyan átadódik a visszaléptető gomb click eseményére, de a fókusz marad azon a boxon, ahol éppen állunk, így nincs módja az exit funkciónak érvényesülni, csak a visszaléptetés befejezésekor. De addigra már le tudom tiltani az eseményvezérlést, így az exit hatástalan.
Jelentem, nyomon vagyok! Azt hiszem, hogy a visszaléptető gomb TakeFocusOnClick=False-ra állítása megoldja a dolgot, mert előbb ugrik oda, és csak aztán az Exit funkcióra.
Egy Userformon végzek adatbeadást. Van egy textboxom, amelyben ellenőrzöm a bevitt adatokat. Konkrétan éppen egy irányítószámot. Az Exit funkcióban ellenőrzöm a szám hosszát, és ha nem 4, akkor figyelmeztetem a felhasználó, és nem engedem ki a boxból.
Ugyanakkor van egy CommandButtonom, ami az adatbevitel mentés nélküli félbehagyását éri el, és visszatér a menüre.
A mentés nélkül tehát azt jelenti, hogy a textboxba történő írást is félbe kell hagyni (hiszen, lehet, hogy utána kell nézni a helyes adatnak). Viszont az exit funkció természetesen nem tudja, hogy Enterrel, vagy valamelyik vezérlő elemre kattintva léptem ki a boxból, így a félbehagyást jelző cmd gomb megnyomásáról sem tud.
Van arra valamilyen mód, hogy megállapítsam az éppen kiválasztott következő vezérlőelem nevét?
Nem vagyok benne biztos, hogy azt értetted, amit mondani akartam, úgyhogy még egy kis kiegészítés.
Az Option Base arra az esetre vonatkozik, amikor egy tömbváltozót deklarálsz a szubrutin elején.
Pl.
Sub akármi()
Dim Tömb(10)
...
End Sub
Option Base 1 esetén a Tömb 1-től 10-ig indexelt, Option Base 0 esetén pedig 0-tól 10-ig.
A Split függvénnyel azonban megkerülöd a deklarációt, és direktben létrehozol egy tömböt. Ha megnézed a makrót, az arrMunkalapok változó nem tömbként van deklarálva, hanem Variant-ként. Ez az a típus, ami minden értéket képes befogadni, még objektumokat is. A Split függvény csinál a Variant típusból tömböt.
A Split függvény pedig úgy van megírva microsoftilag, hogy az általa létrehozott tömb 0-ról indul. De az Option Base ettől függetlenül továbbra is érvényes a Dim-mel létrehozott tömbökre.
Köszi szépen, ezek szerint ez a függvény 0-tól indul. Nem probléma, ha nem 1-gyel kezdődik, csak nem értettem, mivel azt olvastam, hogy a tömbök alap esetben 0-tól indulnak de az option base paranccsal módosítani lehet, akkor ezek szerint ezt nem lehet.
Kipróbáltam az alábbi kódodat és jól működik. Egy apróságban kérném a segítséged vagy bárki más segítségét, biztos tudjátok mi lehet a probléma.
Itt a tömb elemein lépked végig a ciklusszámláló, és nullától indul, ha az eljárás elé írom az option base 1-et akkor elvileg 1-től indulna a számláló. Valamiért továbbra is nulla lesz az első elem indexe. Mi lehet a gond?
Üdv:
Szajmon
Sub ciklus2() Const cMunkalapok = "Management Accounts Hotel/Management Accounts Apartments/Rooms/F&B Summary" Const cPrintAreak = "AN1:BZ70/AN1:BZ110/AN1:BZ199/AN1:BZ134" Dim inti As Integer, arrMunkalapok, arrPrintareak, ws As Worksheet
arrMunkalapok = Split(cMunkalapok, "/") arrPrintareak = Split(cPrintAreak, "/") For inti = LBound(arrMunkalapok) To UBound(arrMunkalapok) On Error GoTo hiba Set ws = ThisWorkbook.Worksheets(arrMunkalapok(inti)) ws.PageSetup.PrintArea = arrPrintareak(inti) If ws.Visible <> xlSheetVisible Then ws.Visible = xlSheetVisible ws.PrintOut Copies:=1 ws.Visible = xlSheetHidden Else ws.PrintOut Copies:=1 End If hibaután: Next Exit Sub hiba: MsgBox "A '" & arrMunkalapok(inti) & "' nevű munkalap nem található." Debug.Print Err.Number, Err.Description Resume hibaután End Sub
Helyesírási versenyen kaptam az alábbi mondatot: "Az aradi vértanúk közül Dessewffy Arisztid nevét nem tudom szótagolva leírni." Természetesen szótagolva.
A minap olvastam egy cikket az amerikairól, aki a CNN-en a magyar nyelv nehézségét taglalja. Meg eszembe jutott egy külföldi diák, aki egyszer azt mondta a magyar nyelvről, hogy tök logikus a felépítése, csak az a baj, hogy minden második eset kivétel a szabályok alól :)
Nemrég kezembe került egy nyelvtani tananyag, ami a tulajdonnevek helyesírását fejtegeti. Hát, tudod... Thewrewk (török) meg Georch (görcs) meg hasonlók... Bat-thyá-ny? Thew-rew-köt??? Nem mondom, hogy ezeket nem lehet mind megtanulni, de én sem fogok a kardomba dőlni, ha véletlenül nem tudom valamelyiket.
És mindezt leprogramozni milyen üdítő lehet :)
Mondjuk az lenne a feladat, hogy írjál programot excelben, ami egy tetszőleges magyar szó szótagolós elválasztását elvégzi. Hogy tetszik? :-)
Köszönöm mindenkinek a válaszokat. Különösen Delilának ezt.
Egyébként pedig elnézést kérek a következő mondatomért: "...az Option Compare Text utasítás segít abban, hogy a stringek összehasonlításánál az adott nyelvi beállításokat - esetünkben magyar ABC szabályait - érvényesítse a program. "
Szóval, amit a magyar ABC szabályainak véltem, az csak az én képzeletemben élt. És bár a nyelvhelyességet világéletemben fontosnak tartottam, a betűrendbe sorolás kérdése elkerülte a figyelmemet. Mostanáig azt képzeltem, hogy amit bebifláztam gyermekként (a, á, b, c ...), az érvényes a rendezésre is.
Még egy ilyen hiányosságomról tudok a magyar nyelvtanban, az pedig a kötőjelek helyes használata. De ezt már nem biztos, hogy képes leszek valaha is pótolni:-)
Rendezés magyar ABC szerint: Vezérlőpult | Területi és nyelvi beállítások | Területi beállítások fül | Testreszabás gombon katt | Rendezés fül | Lenyílóból a Technikai lehetőséget választjuk, végig okézzuk.
Természetesen az alapértelmezett területi beállítás Magyar kell hogy legyen.
Quicksortért cserébe egy a te izlésed szerinti abc sorbarendezés az aktiv munkalapon. Az ékezetes betük helyes rendezését a szövegből oszopok, a kettős betűkét a nem abc karakterekre való oda-vissza cserélés biztosítja. A szóközöket kitöröltem, hogy az Aba Pétert előbbre sorolja mint az Abasári Rizlinget.
A futtatáshoz ki kell jelölni a sorbarendezendő nevek oszlopát. Ebben a formában az első 10 betű és a maradék alapján rendez, de ezt persze átírhatod. Ha a nevek rendezésekor a táblázatod többi oszlopát is mozgatni akarod, akkor az 5. pontban bővítheted az oszlopszámot.
Sub pimreabc()
Dim oszl, sor1, sor2, i
Dim cs, gy, ny, sz, zs, ly, ty
''1. selection parameterek, kisegítő oszlopok betoldása es duplikalas
Az excellel minden megoldható :)))). Itt van még egy megoldás:
Mivel a szóló ékezes betüket az excel a magyar abc szerint rendezi, a szövegből oszlopot paranccsal a karaktereket külön oszlopba téve már megoldható az ékezetes betük pimre féle sorrendje. Így persze a kettős betűk sorrendje borulhat, de ez praktikusan csak c/cs esetében fordulhat elő, ott is csak elvétve.
Az alábbi makró az első 10 betűt teszi külön oszlopokba, amikre aztán egy 11 rendezési kulcsos sorbarendezéső makró írható. Már amennyiben ez tényleg fontos.
Ez egy jó ötlet, ha valaki nem a hivatalos rendezést akarja csinálni, hanem sajátot.
Biztos, hogy megoldható, hiszen ha makrórögzítővel felveszel egy ilyen rendezést, kapsz egy kódot. Ahhoz persze kell mondjuk egy rejtett oszlop, amit akár ideiglenesen is fel lehet venni és törölni képernyőfrissítés letiltásával, amíg tart a rendezés, és akkor nem látja a user.
A másik lehetőség, ha rendezőkulcsnak meg lehet adni egy függvényt is. A Python nyelv például tudja ezt. Nem tudom, a VBA tud-e ilyent. Ha igen, akkor elegánsabb úgy, mint a fenti módszerrel.
A magánhangzók rövid és hosszú változatát jelölő betűk (a – á, e – é, i – í, o – ó, ö – ő, u – ú, ü – ű) a kialakult szokás szerint mind a szavak elején, mind pedig a szavak belsejében azonos értékűnek számítanak a betűrendbe sorolás szempontjából. A magánhangzó hosszú változatát tartalmazó szó tehát meg is előzheti a rövid változatút:
ír Irán író
Irak írandó iroda
iram iránt irónia stb.
A rövid magánhangzós szó kerül viszont előbbre olyankor, ha két szó betűsora csak az azonos magánhangzók hosszúsága tekintetében különbözik:
Eger keres szelel
egér kérés szeles
éger koros szelés
égés kóros széles
A kettősbetűket pedig megelőzik az egyesek (mármint ny előbb van mint nz, úgy ahogy az előbb is írtam).
Nagy lexikonokban is keverednek a rövid-hosszú magánhangzós szavak: pl:állvány alma .......Álmos ...álnév ... áloé ....alom
Amiből az is következik, hogy az első betűre viszonylag könnyen rendezheted a neveket a magyar ábc szerint. Csak annyi kell, hogy a BAL függvénnyel leválasztod az első betüket, és 2 oszlopos rendezést csinálsz. Persze ez csak a munkalapon egyszerű, a vba-tömbökben nem tudom, hogy lehet-e ilyen rendezést csinálni.
Lehet, hogy kiábrándítok valakit, de a rendezés szempontjából az a-á és az e-é között nincs különbség a magyarban. Tessék elővenni bármelyik szótárat, akár helyesírásit, akár magyar–idegen nyelvűt. Az ében és az Elemér ebben a sorrendben helyes. Szóló betűknél nem tudom, miért állít be sorrendet, lehet, hogy ott más elv szerint dolgozik, vagy úgy tekinti, hogy a két szó majdnem egyforma, csak az utolsó betűben különböznek, és akkor mégis kell valamilyen rendező elv. Lehet, hogy a bele, belé esetén is ez történne, most nem kísérletezem.
Tehát jó lenne látni pimre példáit, hogy tudjuk: az Excel működésében van a hiba vagy az elvárásokban?
Nekem úgy tűnik, hogy a kettős betükkel szemben, az AÁ és az EÉ betüpárokat a munkalap is azonosnak tekinti. Meg temészetesen az IÍ, OÓ, ÖŐ, UÚ, ÜÚ betűpárokat is. Tehát amig cucu-csacsi sorrend a magyar abc szerinti, addig az ében-elemér már nem.
Szia, ugyanarra gondolok, amit Te is tapasztalsz. Azaz, hogy a sort parancs használatakor nem tudom elérni, hogy a területi beállítások szerinti sorrendet kapjam. Nem tragédia, csak érdekelt volna, hogy erre tényleg nincs-e lehetőség. Persze nagyon körmönfont programozási technikával biztos megoldható, csak alapból nem.
Mellesleg a z<->y esetben ez kevéssé feltűnő, de az ékezetes karaktereknél feltűnően nem szép, ha keverten látjuk azokat a saját ékezet nélküli párjukkal.
Mert nekem az anziksz és az anya összehasonlítása Option Compare Text-tel azt eredményezi, hogy az anziksz van elől, anélkül pedig az anya szó kerül előre.
A range("A1:A2").sort pedig mindkét esetben az anziksz, anya sorrendet hozza programból.
Másfél hónapja tisztáztuk, hogy az Option Compare Text utasítás segít abban, hogy a stringek összehasonlításánál az adott nyelvi beállításokat - esetünkben magyar ABC szabályait - érvényesítse a program.
Viszont úgy tapasztalom, hogy a programban a sort parancs esetén ez nem működik. Jól gondolom, hogy erre nincs is megoldás?
kipróbáltam, nem mőködik egyenlőre. biztosan valamit elrontok, de nem jelez, hogy dupla. Nem tudom jól értetted-e hogy mit szeretnék.
van az "a" oszlop, ahová beérkeznek a vonalkód adatok. Ha beérkezik egy olyan adat,amit már egyszer beolvastam valamikor (mondjuk 50 sorral ezelőtt) akkor jelezzen, hogy dupla. Így kellene működnie a képletednek, amit adtál?
Vonalkód olvasóval olvasom be a kódokat az excel cellába, és az lenne a feladat, hogy ha már egyszer beolvasott egy számot, és már másodszor szeretném (véletlenül), azt rögtön jelezze...
Hát ez óriási! Nagyon szépen köszönöm a segítséget és a türelmet, hogy ennyire leegyszerűsítve elmagyaráztad! Így mostmár nem csak a feladat oldódott meg, de meg is értettem a lényeget! Le a kalappal!!!
Ha az éves 6% kamatrátát elosztod 12-vel és azt írod be, az nagyon jó közelítés, de nem pontos - főleg magasabb kamatlábak esetén - mivel az adott havi kamat tőkésedik (azaz kamatos kamat a számítás).
Ezért ha 12 hónap alatt a 6% tizenketted részét veszed havonta, akkor az 1 forintod az év végére
(1+0,06/12)^12-1=6,16778118645 %-os éves kamatnak felel meg.
A MÉ és minden pénzügyi képlet a kamatos kamattal számol.
Ha tehát azt akarod, hogy tényleges éves 6%-os kamattal számoljon a képlet, akkor a rátához
nem 0,06/12-t kell beírnod, hanem (1+0,06)^(1/12) - 1-et, vagyis a 6 %-os kamattényezőnek a tizenkettedik gyökéből számított - havi - kamatlábat.
Ez a képletben néhány forinttal nagyobb összeget fog adni jelenértéknek, mivel a kamatláb alacsonyabb.
(Ajánlom még figyelmedbe a pénz időértékéről szóló írásokat.)
Bocs, de ebbe most nincs kedvem beleásni magam, talán majd valaki más... Ezt a függvényt az életben nem használtam még, és nem ma este fogom teli hassal elkezdeni.
Pfú nagyon köszönöm, nagyban elősegítetted a megértést!
Még csak egy olyan kérdés, hogy a vázolt feladatban a MÉ függvényt használva: 23 354, 05 jött ki eredményül.
Most pedig a Te útmutatásod alapján írtam egy ilyen képletet: =((2000*(1+(0.06/12)/(100))^12)-1)*12 és ezzel 24002.4 jön ki akkor most ez lenne a pontos érték? Vagy valamit esetleg elrontottam a képletben?
6% az nem 6, hanem 0,06. A 0,005 a 0,5%-nak a tizedestört alakja, de ez nem Excel, hanem számtan. Ha az Excelben ez problémát okoz, akkor nem jó a cella formázása.
Az egy elvi kérdés, hogy éves vagy havi kamatlábbal számol a bank. Vagyis mennyi időnként írják jóvá. Ha havonta x% a kamat, akkor egy év alatt nyilván (1+x/100)^12 a szorzó, hiszen a második hónapban már az első havi kamattal megnövelt összeg hízik tovább. Ebből visszafelé ki lehet találni, mi dolga a 12-ik gyöknek. De ez is számtan.
Sziasztok! Következő feladatot kaptam a tanáromtól: Pénzügyileg melyik a kedvezőbb? 12 hónapon keresztül megvásárolni a bérletet minden hónap elején 2000 Ft-ért, vagy éves bérletet venni év elején 23 000 FT-ért? A kamtláb évi 6%)
Adatok: A1 cella: 12 A2 cella: 0,005 A3 cella: 2000 A4 cellába meghívom az MÉ függvényt és kiszámolja, 23 354,05-t hoz ki eredménynek. Ráta: A2 Időszakok száma: A1 Részlet: A3 Típus: 1 Ez így rendben is van azt mondta így elfogadja a megoldást. DE! Azt mondta ez így egy kerekítés és aki több pontot szeretne az a 12.-ik gyökkel számoljon. Nem tudok rájönni mit ért ez alatt már mint hova kellene beírni és melyik számnak a 12.-ik gyökét valaki érti esetleg? Ennél több infót nem adott, pontosan lejegyeztem mindent...Nagyon nagyon örülnék ha valaki megfejtené ezt!
U.I.: Mellesleg már az sem teljesen világos, hogy ha az éves kamatláb 6% akkor a havi miért/hogy lesz 0,005. Mikor 6/12=0,5-el. Akkor honnan jön ez a 0,005!?
Egyébként te vezettél rá a megoldásra. Ha nem írod be 23315-ben, hogy hogy lehet egzakt módon méretre állítani a képet, én nem biztos, hogy rájövök, és akkor még mindig egy zsákutcának tűnő sikátorban botorkálnék, messze a megoldástól.
Select ügyben abszolút egyetértek veled. Vannak azonban olyan esetek - sajnos - amikor a nyavalyás excel csak akkor hajlandó az adott objektumon végrehajtani a kívánt módosításokat, ha az éppen ki van választva. Most éppen nem tudok ilyen példát hirtelen, de szívtam már egy-két esetben emiatt.
Talán az application.dialogs(xx).show-val lehetne valamit csinálni, de még nem jutottam el odáig, hogy kipróbáljam, a help és az MSDN pedig ebben a tekintetben abszolut 0-hoz közelít.
Mivel én nem konyítok a makróhoz .....ssssssemmit...már az is teljesítmény részemről, hogy amit küldtél, be tudtam másolni ahova kell, hogy működjön.
És voila....megoldotta a problémámat - még ha szerinted vagy bárki szerint is ez nem szép megoldás. De legalább van!!!
Mellesleg úgy érzem magam ezen az oldalon, mint egy általános elsős az egyetemisták között. Épp, hogy ismerkedem a betükkel. Csak nagyra tárt szemmekkel figyelek. Egy kukkot sem értek az egész oldalból, agyaltam is rajta, hogy merjek-e regisztrálni, ezért ezt megelőzően vagy egy egy hónapon át inkább próbáltam innen-onnan megoldást szerezni a problémámra de sikertelenül. Szóval a szükség hozott ide mielőtt feladnám de sikerrel jártam.
Mégegyszer köszönet. Persze ha ezt még tudod tökéletesíteni, hogy szerinted is "szép megoldás" legyen küldjed csak, kiváncsian várom!
Köszönet neked is Fferi50 és mindenki másnak is, aki bármilyen próbálkozást tett a probléma megoldására.
A Select ellen régóta kampányolok itt, mert az esetek döntő többségében fölösleges. Azért Select-álsz valamit, hogy aztán a Selection által hivatkozott objektumon hajts végre valami műveletet. Ennek mi értelme? Az objektumokat direkben kell meghivatkozni, egyértelmű elérési úttal. Ha az objektumokra Selection-nel hivatkozol, akkor a kódod annyira lesz robusztus, mint mondjuk a kártyavár. Ráadásul a kód megírását is bonyolultabbá teszi. Próbáld ki. Másold be a kódmodulra ezeket:
Sub teszt()
'Select Range("A1").Select Selection
'No select Range("A1") End Sub
Tegyél a Selection után pontot, mintha pl. az Interior.ColorIndex-et akarnád beállítani. Mit tapasztalsz?
Most tegyél a Range("A1") után pontot, mintha pl. az Interior.ColorIndex-et akarnád beállítani. Mit tapasztalsz?
Az intellisense (intelligens kódkiegészítő) nem működik Selection-nel, mert f.ngja nincs, hogy a Selection milyen ojektumot takar. Range("A1") esetében tudja, és ezért csak azokat a tulajdonságokat és műveleteket hozza fel, amelyek a Range típusú objektumra értelmezettek.
A SendKeys meg végképp a programozás megcsúfolása. A legbizonytalanabb kimenetelű dolog, amit Excelben el tudok képzelni. A bolygók állásától talán nem függ az eredménye, de minden mástól igen. Vészhelyzetben oké lehet, de minden más esetben kerülendő. Például vegyük azt a kódot, amit beküldtem. Mi van, ha pl. elszámoltam a TAB-okat, és rossz helyen "nyomok" ENTER-t? Vagy mi van, ha az Excelnek idő kell, hogy egy SendKeys-sel indított feladatot végrehajtson, és addig nem tud fogadni új billentyűparancsokat, de a kódom meg rendületlenül küldi őket? A gép sebességétől függő számú lépés kimarad, aztán megy tovább?
Hogy ne kelljen Jimmynek elismételnie a mostanában a témában elhangzottakat, készítettem egy kis összeállítást az elmúlt negyedévben itt született indoklásokról a select utasítás mellőzésének érdekében:
Ha rejtett Comment-ek vannak, azokat előbb meg kell jeleníteni, hogy a Select ne akadjon ki:
Sub Megjegyzem() Dim sh As Shape, cm As Comment, i As Long For i = 1 To 2 For Each cm In ActiveSheet.Comments cm.Visible = True Set sh = cm.Shape sh.Select DoEvents Application.SendKeys "^1" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" cm.Visible = False Next Next End Sub
Meg fogom kövezni magam ezért a makróért, de nincs jobb ötletem, mint Select és Sendkeys, a két leginkább kerülendő cucc.
Sub Megjegyzem() Dim sh As Shape, cm As Comment, i As Long For i = 1 To 2 For Each cm In ActiveSheet.Comments Set sh = cm.Shape sh.Select DoEvents Application.SendKeys "^1" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" Application.SendKeys "{TAB}" Application.SendKeys "{ENTER}" Next Next End Sub
És hogy miért kell a For i = 1 To 2 ciklus?
Halvány lila gőzöm sincs. Azt tapasztaltam, hogy ha nincs ismétlés, akkor az első komment képe kimarad a formázásból. Ha kétszer egymás után lefuttatom ugyanazt, akkor az első is átállítódik.
Ami feltétlenül szükséges előkészület:
Egy képen csináld meg méret helyreállítását. Ez azért kell, hogy amikor legközelebb feljön a Megjegyzés formázása ablak, akkor a Méret fül legyen felül.
A kód működésére nincs garancia. Az egyik gépemen fut, a másikon nem...
Kitöltendő cellákra adatérvényesítést használok, részben szabály nélkül, csak a felirat kedvéért.
Rákattintva a megjelenő szövegre egy vatag keretet láttam körülötte. Ekkor egérrel odébb lehetett húzni.
Na ez az, amit nem kellett volna. Soha többé nem bírtam visszatenni a helyére, mert akárhogy próbálkozom, innentől fogva az ÖSSZES cella érvényesítő szövege azon a helyen jelenik meg, ahova azt az egyet húztam, bármelyik is legyen az. Akár méterekre a cellától, ahova tartozik. És nem lehet visszavonni. Mentést meg nem csináltam közvetlenül előtte.
Szerencsére két hasonló táblázatom van, a rontottat eldobtam, majd visszamentem a másikból.
A 2007-es excelben is úgy van mint a 2007-ben. A sorvektor hatványozásánál a pontosvessző az elválasztójel, az oszopvektor hatványozásánál pedig a backslash. Nagy meglátásod volt ezt felfedezni, mivel a súgóban erről sehol semmi.
És ezzel meg is van a többször visszatért kérdésemre a válasz, hogy mi a fenének kellett transzponálni a LIN.ILL képletben. Mert aki kiokumlálta a képletet, az is annyit tudott, hogy a default elválasztójel csak a sorvektoroknál müködik. Így hát transzponált. Ahelyett, hogy konzultált volna veled, hogy megmond neki, hogy egyszerűbb lenne backslasht használni :)))))
Szeretnék még megemlíteni neked valamit. Most hogy megint szóbahoztad hogy dátumok az x változóid, az az érzésem, hogy a trendszámításodhoz a harmadfoku polinomnál sokkal adekvátabb a Fourier analizís. Az Adatelemzés excelbővítmény tartalmazza.
Igen, köszönöm. Valószínűleg maradok az egy munkalapos verziónál. Ronda, de működni fog. (A probléma egyébként nem bővebb annál, ami le volt itt írva.)
Valóban, magában a fileban vannak a képek tárolva.
Viszont: Mi lenne, ha egyszer rászánnád magad és végigmennél a megjegyzéseken az alábbi makróval:
for each cmnt in activesheet.comments
cmnt.visible=true
stop
'itt átmész az adott oldalra és beállítod az alaphelyzetet, utána visszajössz.
hossz=cmnt.shape.height ' itt elmentheted a méreteket, ahova akarod, hogy később ne kelljen vele foglalkozni.
szel=cmnt.shape.width
cmnt.visible=false
next
A méret visszaállítás már a korábban leírt makróval megy, ahova a szélességet, hosszúságot az elmentett helyről veszed.
Cserébe még próbálkozom kibányászni az alaphelyzet beállítását - mert a metódus (SetShapesDefaultProperties)meg van rá, csak valamiért nem akarja megenni.
Szerintem az Excel a megjegyzésekben tárolt képeket nem külön tárolja, hanem a mentett fájlban...ezt a fájl méretéből okoskodtam ki, ami nálam 40Mb körül mozog.
ja, és hátha valakit érdekel e témában ha sok megjegyzéshez lenne kép rendelve és szeretné kibányászni mondjuk az összes képet, elegendő a mentés másként parancsnál weblap-ként menteni. Én is találtam, hasznosnak tartom ezért osztottam meg.
A hivatkozott hozzászólásban láthatod, ha az x adatok sorvektort alkotnak, akkor a hatványvektornak oszlopvektornak kell lennie, azaz nem backslash-sel, hanem pontosvesszővel kell az elemeit elválasztani.
Nálam a 2010-ben működik az alábbi képlet:
=LIN.ILL(G3:K3;G1:K1^{1;2;3})
ahol G1:K1 cellák a mai dátum + 4 nap.
Kíváncsian várom a Te eredményed!
(Hogy a 2007-ben mi a helyzet, talán Tbando tudna valamit mondani)
Más: már írtam, statisztikából úgy tanultam (és tanítottam), hogy idősorok trendszámításánál nem a dátumokat használjuk x adatokként, hanem az 1,2,3 ... stb. számokat.
Persze nyilván előfordulhat, hogy a valós számadatokat az excel képes dátumként is értelmezni - aztán számol is velük, mivel egyébként meg számnak tekinti.
Biztosan tartalmazza a sorokban egy-egy cella a képek útvonalát és nevét.
Nagyon zavar, ha egy makró újra betölti a képeket, onnan megjegyzi az eredeti méreteit, és átállítja eszerint a megjegyzés méreteit? A betöltött képet törli. A méreteket el is tárolhatja a saját rekordjába, hogy legközelebb ne kelljen újra betölteni a képet.
A megjegyzésben tárolt képek eredeti méretének beállítása egyszerű csak automatizálni nem tudom azért kellene a makró.
Megjegyzésben tárolt kép eredeti méretre állítása: - cellára jobb klikk - megjegyzés szerkesztése - megjegyzés peremére dupla bal klikk - méret - alaphelyzet - ok
ezt a folyamatot viszont nem lehet együtemben megcsinálni akkor, mikor a képet hozzáadtuk a megjegyzéshez.(részemről erre nincs is szükségem) Tehát előbb le kell okézni, kilépni a szerkesztésből majd a fentebb leírtakkal folytatni.
Ja és a makró eleve nem játszik, hiszen a felhasználók egy része eleve nem engedélyezi a külső forrásból származó makrókat. Mindent az Excel alapfunkcióival kell megoldanom.
Lehet, hogy az lesz a megoldás, hogy megszüntetem a másik munkalapot, és valahol ugyanazon a munkalapon elrejtett XY oszlopokban sorolom fel az elemeket. Az én életem lesz bonyolultabb tőle, de legalább jól érzi magát valaki Redmondban a bal kettőben...
Ezek nagyon bonyolult megoldások, egyrészt nem is ér ennyi munkát az egész, másrészt ugye itthon szerkesztem a táblázatot Excel 2000-ben, mert az biztos mindenhol megnyílik, elmentem xls-ben, aztán holnap odabent tudom 2010 alatt tesztelni, szóval még csak nem is egy kerületben zajlik a két esemény. :-)
Marad a figyelmeztetés.
Tudtommal a megnyitáskor nem történik verziók közötti konverzió, csak ha másként menti.
Ha a probléma a mentésnél van, akkor a mentést tedd egy command gombra és a beforesave eseményben makróval mentsd el a megfelelő formátumban a filet.
De lehet, hogy már a megnyitáskor van probléma. Ezt lehet kezelni az open eseménybe betett verzió vizsgálattal.
De valóban segíthet egy olyan figyelem felhívás is, hogy ne konvertálja, csak kompatibilis módban nyissa meg. Aztán ha nem tartja be, lehet neki hivatkozni a figyelem felhívásra.
(Azt nem tudom, hogy meg lehet-e akadályozni a konvertálást.)
Ez egy olyan űrlap, amit kiteszünk a honlapunkra, ahonnan az emberek letölthetik, és mindenki azzal tölti ki, amije neki van, aztán e-mailben visszaküldi. Ha én nyitogatnám meg, akkor nem lenne ilyen bonyolult...
Esetleg írjam oda, hogy hagyja meg xls-ben, és ne mentse át xlsx-be, mert akkor elromlik? Ez segít?
Az egyik megoldás lehet szerintem az, hogy a munkafüzet megnyitásakor figyeled az Excel verziószámát és attól függően végignézed az érvényesítéseket.
Úgy gondolom - de csak gondolom -, hogy konverziónál fordulhat elő a nevek behelyettesítése.
A verzió figyelés azért is lehet hasznos, mert az újabb verziókban vannak olyan lehetőségek/tulajdonságok, amelyek a régiekben nem működnek, ezért azokat a műveleteket ajánlatos elkerülni.
Most esik le a tantusz, hogy ez nagyobb probléma, mint gondoltam!
Tud valaki olyan módszert, amivel egy másik munkalapon elhelyezett lista alapján xls munkafüzetben Excel 2000-től 2010-ig megbízható módon működő legördülő listás adatérvényesítést lehet csinálni?
Jobban belegondolva, ha munkafüzetek megnyitása van a ciklusmagban, akkor a DoEvents által okozott lassulás valószínűleg nem is vehető észre.
Én úgy teszteltem, hogy ciklusban felvettem a ListBoxba 2000 UUID-t, és ott a DoEvents kb. kétszeresére növelte a futási időt. De még így is csak 12 másodperc volt, szóval... :-)
Azt lehetne, hogy egy mini adatbázist tárolni egy (rejtett) munkalapon, ahol az egyes cellákhoz tartozó képek elérési útvonala van, vagy inkább rögtön a méretadatok. Abból egyszerűen helyre lehetne állítani a méreteket. Persze egyszer meg kell csinálni a listát, ezt nem lehet el/megkerülni, de aztán már csak karban kell tartani, ami talán nem olyan vészes.
Már csak azt nem értem, hogy az otthoni 2007-es Excel miért tudta eredetileg a negyvenezres dátumokkal is kiszámolni, míg a munkahelyi 2010-es nem; megnéztem, a beállításoknál ugyanúgy (a default) mindkettő.
Szerintem félreérted a feladatot (vagy én értem félre). Arról van szó, hogy adott egy munkalap, amin már eleve vannak képes megjegyzéssel ellátott cellák.
Tehát nem most teszem be a képet, hanem eleve adva van. Ha most tenném be, akkor gyerekjáték lenne a méreteit meghatározni, és a comment szövegdobozát aszerint formázni. De ha már benne van a kép, akkor hogyan szeded ki belőle? Én erre nem találtam megoldást, kezelőfelületen sem, és programban sem. Erre a kérdésre a te ötleted sem válasz.
Akkor viszont a worksheet calculate eseményét kell kihasználni:
Private Sub Worksheet_Calculate() If Range("Z1").Value <> Range("H2").Value Then Application.EnableEvents = False Range("F3").Value = Range("H3").Value Range("Z1").Value = Range("H2").Value Application.EnableEvents = True End If End Sub
Ez akkor fut le, amikor a munkalap adatai újraszámolódnak.
Viszont nekünk csak akkor kell a folyamat, ha a H2 cella értéke megváltozik. Ezért ezt el kell tárolnunk valahova, erre szolgál a Z1 cella a példában (de bárhova is teheted).
Ha a Z1 értéke nem egyezik a H2 értékével, akkor lefut a kívánt akció és a Z1 értékét is átállítja.
Legközelebb, ha kiváltódik az esemény - újraszámolja a munkalapot - de a H2 cella értéke nem változik, nem fut le az akció.
Ez nagyon állat, működik is, viszont csak akkor, ha én írom át a cella értékét. Egyébként ez a cella egy szummázás végösszegét tartalmazza, aminek az értéke változik a többi munkalap adataitól függően. Valahogy el kéne érni, hogy fusson a makró akkor is, ha egy másik munkalap megváltoztatásának hatására változik meg a folyamat beindítására használt cella értéke. Remélem ez sem bonyolítja túl a helyzetet, mert már majdnem tökéletes!!!
Private Sub Worksheet_Change(ByVal Target As Range) If Not Nothing Is Application.Intersect(Target, Range("H2")) Then Application.EnableEvents = False Range("F3").Value = Range("H3").Value Application.EnableEvents = True End If End Sub
Ezt másold be az adott munkalap kódlapjára.
Ha a bal oldalon kiválasztod a worsheet-et, akkor jobb oldalon megjelennek az események. Itt válaszd ki a Change eseményt.
Ekkor a kódlapon megjelenik a fentiekben nem vastagított 2 sor.
Átrágtam magam az ajánlott könyvön, valamit talán még tanultam is belőle, de hogy új makrót írjak, arra nincs sok esélyem.
Viszont most talán pontosabban meg tudom fogalmazni, hogy mit csináljon a makró. Ha valaki össze tudja dobni, az nagy segítség lenne. Tehát az adott munkafüzet h2-es cella értékének a változására kellene lefutnia és egész egyszerűen a h3-as cella értékét kellene átmásolnia az f3-as cellába. Persze több másolás kell majd, de a többivel talán majd én is tudom bővíteni. Nagy problémám, hogy nem tudom például a kijelöléseket megszűntetni. Valahogy úgy kéne lefuttatni a makrót, hogy ne generáljon smmi más változást beleértve a kijelölések megváltoztatását, egyszerűen csak kerüljön bele a célcellába a másolt cella értéke. Lehet ilyet csinálni?
Rögzítettem egy makrót, majd itt-ott töröltem belőle.
A lényeg, hogy behívom a képet, elteszem a 2 méretét 1-1 változóba, törlöm a képet.
Beszúrok egy megjegyzést, ehhez az előbb tárolt 2 méretet rendelem, majd be(le)szúrom ismét a képet. Itt nem foglakoztam a képernyőfrissítés tiltásával és engedélyezésével. Kicsit kacifántos módszer, de működik.
Teheted ciklusba, ha az egyes képek útvonalát és nevét előbb tároltad az egyes sorokban.
Sub Rögzítés1() Dim magassag As Double, szelesseg As Double ActiveSheet.Pictures.Insert("E:JpgLóÁtló.jpg").Select Selection.ShapeRange.LockAspectRatio = msoFalse magassag = Selection.ShapeRange.Height szelesseg = Selection.ShapeRange.Width Selection.Delete Range("A1").AddComment Range("A1").Comment.Shape.Select True Selection.ShapeRange.Height = magassag Selection.ShapeRange.Width = szelesseg Selection.ShapeRange.Fill.UserPicture "E:JpgLóÁtló.jpg" Range("A1").Comment.Text Text:="" End Sub
Nagyobb berendezéseket gyártottunk, amiknek az állapotáról havonta kellett tájékoztatni a vezetőséget. A munkaszámokat tartalmazó cellákhoz megjegyzésben csatoltam a berendezések aktuális állapotáról a felvételeket. Szerintem nagyon hasznos funkció.
Arra is jó, hogy pl. az ügyfelek fotóját tegyük a megjegyzésbe. A nevek kiesnek a fejemből, de egy fotó sokat segít az azonosításban.
"Jelenleg azt gondolom, hogy rövidebb időbe fog telni neked megcsinálni az átméretezéseket manuálisan, mint nekem az, hogy erre programot eszkábáljak össze, úgyhogy átengedem a megoldás lehetőségét."
Sajnálom az elvesztegetett idődet, nem kitolásból tettem fel a kérdést hanem, mert több szem többet lát, hátha valakinek semmiség az ami nekem lehetetlen.
Manuálisan átméretezni? Már megfordult a fejemben de visszatart az, hogy valaminek a hatására (más szempont szerinti rendezés, törölt sor, stb...mittudomén) a képek méretei megváltozhatnak (ez már megtörtént, ezért vagyok itt) és akkor oda a belefektetett idő. Ilyenkor jönne jól egy makró, mely néhány másodperc alatt elintézné a problémát. Persze ha lehetetlen, akkor mást kell kitalálnom.
Inkább tenném mellé egy külön cellába, hogy állandóan láthassam. :-)
Az én felfogásom szerint a megjegyzés csak olyasmire való, aminek nincs "üzemszerű" helye a táblázatban, nem funkcionális és csak a cellák kis részénél használjuk. Elég visszafogottan érdemes használni. De persze ez vitatható egyéni állláspont.
Amit írtam ötletet az működik, egy dologra kell vigyázni:
A megjegyzés szerkesztésénél a méret fülön levő dolgokat nem szabad piszkálni. (Érdekes módon ott engedi az eredeti méret és a rögzített arány bejelölését is, ezeknek jelöletlennek kell lenni).
Egyébként, ha programból szúrod be a képeket, akkor úgyis megtudod a méretet is.
Már elcs.sztem vele 4 órát eredmény nélkül. Most nincs több kidobni való időm.
Annyi bizonyosnak tűnik, hogy az objektum nem publikál semmiféle fogódzót, amivel a megjegyzés hátterének beállított kép tulajdonságait le lehetne kérdezni. Talán valami Windows függvénnyel meg lehetne ragadni, de erre sem találtam semmi értelmes tippet.
Jelenleg azt gondolom, hogy rövidebb időbe fog telni neked megcsinálni az átméretezéseket manuálisan, mint nekem az, hogy erre programot eszkábáljak össze, úgyhogy átengedem a megoldás lehetőségét.
Ha jól sejtem, ez egy makrórögzítővel felvett makró. Így soha nem fog menni, mert a szövegből oszlopok funkció csak egy határoló karaktert kezel.
De ha ugyanezt elkezded elölről több lépésben, pl. a makrórögzítés közben először csinálsz egy globális cserét (két szóközből valami nem használt karakter, pl. | vagy @, mindent cserél), majd az így bevezetett határolójel szerint bontasz, akkor sikerülni fog.
Lehet még turbózni a felesleges szóközökk törlésével is.
Köszi, mondanám, hogy ezért írtam oda zárójelben, de sajnos nem így van. (Aztán meg hiába is vettem volna észre, szerkeszteni meg nem lehet a hozzászólást...ja, hogy ezért van az előnézet.)
Tudna valaki segíteni abban, hogy egy stringből készített oszlop határoló karaktereit hogyan tudnám megváltoztatni. Az a problémám, hogy kettő, vagy több szóköz esetén kellene új oszlop.
például:
M 8 HIT-V M8*80/65 8 8.8 HILTI 0.00kg
Ezt a lenti kódot próbáltam, de nem sikerül. Mindenképpen egy szóköz, vagy egymásutáni szimplán szereplő szóközök esetén teszi új oszlopba.
Már vagy egy hónapja próbálkozom készíteni rögzítéssel vagy szerezni egy olyan makrót, mely MSO 2003 Excelben a kijelölt cellákban a képet tartalmazó megjegyzés esetén beállítja a kép eredeti méretét. Ennyi! Ha ez egyáltalán lehetséges? Korábban találtam egy angol nyelvű topicot, ahol angolul már kérte ugyanezt valaki de ott nem tudták megoldani. írt mindenki mindenfélét de erre nem volt megoldás pedig olyan egyszerűnek tűnik.
Most már csak azt nem értem, hogy NPW-nek hogy-hogy nem tűnt fel, hogy a dátumtranszformációja utáni x^123-mal kapott Linill-je nem a harmadfokú polinomé.
Van egy macro...fut fut...majd a végén felteszek egy kérdést. Ha a válasz nem, akkor kilépek a macroból, ha igen, akkor újra kéne magát indítani...
Ezzel vagyok gondban. Hogyan tudom újra indítani a macrot a macro végén egy feltételhez kapcsolva?
Eddig ezt csináltam....működik a kilépés, de nem tudom elindítani újra önmagát...
Tudtok segíteni esetleg?
Előre is köszi!
Sub Masodfoku1()
.
.
.
.
Choose = MsgBox(prompt:="Kér új számolást?", Buttons:=vbYesNo) If Response = vbYes Then DoCmd.RunMacro "Masodfoku1" Else ' The no button was selected. Exit Sub End If
Másrészt, ha csinálsz egy próbát a lin.ill függvénnyel, akkor azt látod, hogy az x a 123-on -ra azt írja ki, hogy #szám, majd az egészre azt, hogy #érték, mert a #szám bemeneti érték nem megfelelő az x értékekre.
Tehát még akkor is jön az #érték hibaüzenet, ha tömbképletként van bevive egyébként.
A szűrt listából szerintem sehogy se akard eltüntetni a már nem x-ket, mert aki kimaradt belőle, az már nem tud visszakerülni.
Amit te akarsz szerintem, azt egy új szúréssel tudod elérni. Ehhez átírhatod a kritériumtartomány első celláját, ahogy Fferi javasolta, vagy megcsinálod az én indexes oszlopaimat, de az irányított szűrés helyett alkalmazhatod a normál szűrést is az új nap oszlopát választva.
Köszi a segítséget, sikerült kiszűrni őket, meg is van mindenki akinél x van. Már csak az az egyetlen kérdésem lenne, hogy ha változik a beosztás akkor hogyan tudom automatizálni, hogy akinél már nem x van azt eltüntesse a szűrt listából, vagy akinél megjelenik az x azt belevegye; frissítse a listát?
A Munka1 táblázatodnak nincs fejléce. úgy elég nehéz szűrni.
Meg azt sem írtad meg, hogy melyik napra akarod elvégezni a szűrést.
Ha a naponkénti munkavégzőket akarod listázni, akkor azt javaslom, hogy miután megcsináltad a fejlécet, a táblázat mellé tegyél még 2 oszlopot. Az első a névoszlop, a második pedig a vizsgálandó napé lesz. És ezekbeaz index függvénnyel hozd ki a neveket meg az adott napot. Majd erre a 2 oszlopra szűrjél
Most támadt egy eszement ötletem. Mint anno SK-nak, aki rájött hogy a magyar excel a magyar abc kettős betűit 1 betűnek látja, szemben a vba-val, amelyik nem.
Szóval én el tudom képzelni, hogy a 2010-es excel a dátumfomákból való számolásnál dátumformában akarja kiírni az eredményt, amiknél azonban már értelmezhetetlenek a baszomnagy számok.
Kösz!. Megjött. Studiroznom kell, ami számomra nem olyan eccerű. Ugyanis ez az én egyik szűk keresztmetszetem. A térlátás. Egyetlen tantárggyal nem tudtam megbarátkozni a gimis éveim során, az ábrázoló geometriával. És beugrik a matek érettségim is, amikor a 4 feladatból 3-mal negyedóra alatt végeztem, de a negyedikkel meg még azóta is küszködöm. Mert abban egy forgástest felszínét és volumenét kellett kiszámolni, ami elég bajos, ha az ember a forgástestet nem látja, nem tudja elképzelni. És így vagyok ezekkel a kurva márixokkal is. A 2 dimenziósak még csak-csak, de a többdimenzósoknál teljes sötétség. De talán sikerül megértenem :))))
Nézd meg az adatérvényesítést az adott oszlopra. Mert azt kizártnak tartom, hogy a munkalapok alapból korlátoznák 40.000^3-nál nagyobb számok használatát.
Bocsi, de mi értelme van 2013-at, mint dátumot négyzetre és köbre emelni egy regresszió számításnál?
Az A megoldás az, amit csináltál (már ha jól értettem, hogy a kezdődátum az adatsor első dátuma).
Ilyenkor simán az 1,2,3,.... értékeket kell x-nek felvenni, hiszen az y adat nem az évszám nagyságához korrelál, hanem az egymás utáni adatok összefüggését (trendjét) szeretnéd megtudni.
Tedd be a ciklusba az alábbi utasítások valamelyikét:
DoEvents
vagy
Me.Repaint
Azzal azért számolj, hogy ez meg is lassítja a kód futását. Esetleg érdemes lehet a cikluson belül egy számlálót futtatni, és pl. minden tizedik, huszadik, vagy századik ciklusvégrehajtásnál használni a fenti parancsok egyikét.
A legegyszerűbb megoldás, ha ráteszel a fejlécre egy szűrőt, és rászűrsz az x-re, aztán esetleg az eredményt ki is másolhatod egy másik munkalapra, és utána kikapcsolhatod a szűrőt.
Megírtam egy makrót EXCELL-ben. A makró tartalmaz egy FORM-ot (listbox, labelek, parancsgombok - commandbuttonok). Az egyik parancsgombra való kattintás után generálok egy DO ... LOOP ciklust, amelyben sorra megnyitok adatfájlokat (.xlsm), néhány adatot elhelyezek a form listboxában és labeljein, az adatfájlt bezárom, majd folytatom a ciklust.
A gondom az, hogy a FORM-on elhelyezett adatok a ciklus folyamán nem jelennek meg folytonosan, csak a ciklus befejezése után egyszerre.
A kitevő mátrixban ha a -t átírom ;-re, hibát jelez. Viszont a -k közé írt számokat tetszés szerint módosítgathatom, adhatok hozzá újakat, elvehetem, azt nem bánja.