Keresés

Részletes keresés

Törölt nick Creative Commons License 2013.12.05 0 0 23335

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?

Előzmény: Sánta Kutya (SK) (23332)
pimre Creative Commons License 2013.12.05 0 0 23334

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:

 

Egy munkalap használatához (nyomtatásához) nem kell a select: http://forum.index.hu/Article/viewArticle?a=127139728&t=9009340

 

Másoláshoz sem kell: http://forum.index.hu/Article/viewArticle?a=127141602&t=9009340 és http://forum.index.hu/Article/viewArticle?a=127200457&t=9009340

 

Itt egy kicsit részletesebb indoklás: http://forum.index.hu/Article/viewArticle?a=127561473&t=9009340 és egy másik: http://forum.index.hu/Article/viewArticle?a=127584953&t=9009340. Az utóbbi egyik mondatához „A select utasítás csak az aktív munkalapon működik.” tartozik egy kiegészítés: A képernyőfrissítésnek ezalatt nem szabad tiltva lennie (tehát az Application.ScreenUpdating értéke True kell, hogy legyen), különben nem érvényesül.

 

Ráadásul kompatibilitási problémákat is okozhat a 2003-as és 2007-es verzió között: http://forum.index.hu/Article/viewArticle?a=127842112&t=9009340

 

 

Előzmény: Sánta Kutya (SK) (23332)
enyan Creative Commons License 2013.12.05 0 0 23333

Hibátlan, működik faszán. Kisebb-nagyobb változtatásokat remélhetőleg én is tudok majd eszközölni rajta.

 

Köszi szépen!

Előzmény: Fferi50 (23296)
Sánta Kutya (SK) Creative Commons License 2013.12.05 0 0 23332

Miért kerülendők?

Előzmény: Törölt nick (23330)
Törölt nick Creative Commons License 2013.12.05 0 0 23331

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

Előzmény: Törölt nick (23330)
Törölt nick Creative Commons License 2013.12.05 0 0 23330

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

 

Előzmény: JT2 (23315)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23329

Na jó, az Ecel teljes újraindítása megoldotta. Bill Gates-módszer.

Előzmény: Sánta Kutya (SK) (23328)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23328

Hmm, a másikon is részben elromlott. Ha leveszem az érvényesítést, majd visszateszem, az se segít.

Előzmény: Sánta Kutya (SK) (23327)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23327

Nagyon furcsa dolog történt.

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.

tbando Creative Commons License 2013.12.04 0 0 23326

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

Előzmény: Fferi50 (23319)
tbando Creative Commons License 2013.12.04 0 0 23325

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.

Előzmény: NPW (23300)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23324

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

Előzmény: Fferi50 (23314)
Fferi50 Creative Commons License 2013.12.04 0 0 23323

Szia!

 

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.

 

Üdv.

Előzmény: JT2 (23322)
JT2 Creative Commons License 2013.12.04 0 0 23322

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.

Előzmény: Delila10 (23318)
JT2 Creative Commons License 2013.12.04 0 0 23321

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.

Delila10 Creative Commons License 2013.12.04 0 0 23320

Kipróbáltam, igaz. :)

Előzmény: JT2 (23315)
Fferi50 Creative Commons License 2013.12.04 0 0 23319

Szia!

 

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.

 

Üdv.

Előzmény: NPW (23300)
Delila10 Creative Commons License 2013.12.04 0 0 23318

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.

Előzmény: JT2 (23315)
JT2 Creative Commons License 2013.12.04 0 0 23317

pontosan

Előzmény: Fferi50 (23316)
Fferi50 Creative Commons License 2013.12.04 0 0 23316

Szia!

 

És akkor visszaáll neked az eredeti méret (a változások előtti)?

 

 

Üdv.

Előzmény: JT2 (23315)
JT2 Creative Commons License 2013.12.04 0 0 23315

megint én!

 

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.

Fferi50 Creative Commons License 2013.12.04 0 0 23314

Szia!

 

Akkor ennyit tudtam segíteni...

 

Üdv.

Előzmény: Sánta Kutya (SK) (23313)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23313

Ott egy jelszóval levédett Excel-táblázatot fogsz találni, szerintem azzal nem sokra mész...

 

Előzmény: Fferi50 (23312)
Fferi50 Creative Commons License 2013.12.04 0 0 23312

Szia!

 

Adsz egy linket a honlapra?

Ha gondolod lehet priviben is.

 

Üdv.

Előzmény: Sánta Kutya (SK) (23311)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23311

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

Előzmény: Fferi50 (23309)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23310

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.

Előzmény: Fferi50 (23309)
Fferi50 Creative Commons License 2013.12.04 0 0 23309

Szia!

 

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

 

Üdv.

Előzmény: Sánta Kutya (SK) (23306)
Fferi50 Creative Commons License 2013.12.04 0 0 23308

Szia!

 

Ahogy én látom, a képek eredeti méretét nem lehet már meghatározni, mert az a tulajdonság nem használható sajnos itt.

Viszont az adott makróval egyrészt ki lehet íratni a jelenlegi méreteket.

Aztán lehet módosítgatni a méreteket tetszés szerint, amíg el nem találod a megfelelőnek látszót.

Azt gondolom, ez is jobb mint a kézzel állítgatás.

Tanulság viszont, hogy mindenképpen el kell tárolni valahova - elővehető módon - az eredeti méreteket.

 

Üdv.

Előzmény: Törölt nick (23298)
tbando Creative Commons License 2013.12.04 0 0 23307

Szerintem tedd fel a 2010-es füzeted a datahura. Feri biztos megnézi, mivel sokat molyoltunk e témán. 

Előzmény: NPW (23300)
Sánta Kutya (SK) Creative Commons License 2013.12.04 0 0 23306

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?

Előzmény: Fferi50 (23304)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!