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.
Sub Oszlopba() Dim ter As Range, sor As Long, CV As Object
Range("A1").Select '****************** Set ter = Selection.CurrentRegion sor = 1
For Each CV In ter CV.Copy Cells(sor, "G") '*************** sor = sor + 1 Next End Sub
Ez a makró az A1 cellában kezdődő táblázatból készít 1 oszlopot a G oszlopba. Csillagokat tettem két sor végére, ahol változtathatsz. Az elsőnél a táblázat bal felső celláját állíthatod át, a másodiknál a kigyűjtés oszlopát.
Sziasztok, újabb érdekes problémában kérem segítségeteket.
Adott egy kiexportált adatfájl, 3 oszloppal, töb ezer sorral.
A oszlop: mérőóra gyári szám
B oszlop: leolavásás dátuma
C oszlop: óraállás
Tehát pl.
gy.sz. dátum állás
AB12 07.15 1145
CD34 07.04 3456
AB12 06.22. 1023
EF56 06.30 4545
EF56 06.05. 3367
AB12 06.10. 999
CD34 06.11. 2999
AB12 07.31. 1867
stb.
Olyan képletet keresek, hogy mérőóránként (gyári szám) kikeresi a két legjabb dátumú óraállást
pl. az AB12-nél ez a 07.31-es (1867) és a 07.15-ös (1145) óraállás.
Kimásolnám a gyári számokat (ismétlődések eltávolítását lefuttatom) és a keresett képletet végighúzva mindegyik gyári szám mellé kiírja a keresett óraállásokat.
Nyilván a MAX(B:B) és a NAGY (B:B;2) nem megy, mert a mérők gyári számait nem veszi figyelembe
De ha így nem megy, akkor a lényeg annyi lenne, hogy az a másik program, ahova be akarom illeszteni az excel táblát, A1 Enter, B1 Enter, C1 Enter, D1 Enter, A2 Enter, B2 Enter, stb sorrendben „értelmezze”. Ha minden az A oszlopban lenne, akkor úgy értelmezné…
Tud valaki arra módot, hogy egy tábzázatból 1 db oszlopot csináljak, úgy hogy a balról jobbra haladva az értékek mind egymás alatt legyenek, majd a 2. sor ez alá. Valahogy így (persze jóval nagyobb táblázatot kell elképzelni):
1234
5678
1
2
3
4
5
6
7
8
Ha ez nehéz, akkor az is elég lenne, ha az eredeti táblázatot be tudnám illeszteni egy másik programba úgy, hogy mikor beillesztem balról jobbra olvassa be az értékeket és minden érték utána legyen egy Enter.
Köszönöm az ötleteket. Mostanra megszállt az ihlet, és megtaláltam a megoldást. Ismeritek a viccet, aminek az a poénja, hogy hogyan fogsz egy elefántot? Fogsz kettőt, és az egyiket elengeded. Na én is ezt fogom csinálni. Miután a felhasználó megnyitotta az adatfájlt, akkor listázáskor az egészet átmásolom új néven. Ez viszi magával az eredeti jelszavakat. Majd ebbe a fájlba írom bele a az elkészítendő új munkalapo(ka)t. (Második elefánt). Majd törlöm az eredeti munkafüzetből származó, itt már felesleges eredeti munkalapo(kat). (Egyik elefánt elengedése).
És amint hazaérek a szabadságomról, neki is látok megvalósítani.
Egy ötletem van, de nem tudom megvalósítható-e. Nem akarod a jelszókat kezelni. Ok. A felhasználó kezeli a saját jelszavait. Tehát az elvileg az ő felelőssége, hogy mentéskor is adjon meg jelszót. Én úgy tudom, hogy az excel párbeszédpaneljei meghívhatók VBA-ból is. Párat már én is használtam.
Tehát elvileg a feladat az lenne, hogy nem a programod menti el a fájlt saveas-al, hanem csak meghívja a mentés másként párbeszédpanelt kitöltve a szükséges elemeit (név, elérési út stb). Itt a felhasználó megadhatja a jelszavakat közvetlenül az Excelnek.
Illetve a jelszavak kezelése egy másik beállítás párbeszédpanelon történik, de nem tartom kizártnak, hogy akár azt is meg lehet szólítani közvetlenül, és akkor már maradhat a saveas parancs is, mert a felhasználó már közölte a szükséges jelszavakat az Excellel.
A megvalósítást ne kérdezt, mert ennyire még nem ástam bele magam a témába, de szerintem vannak itt profik akik akár kapásból tudják.
Szerintem semmivel sem nagyobb a biztonsági veszélye, mint hogy pisztollyal fenyegetnek, hogy add meg a jelszót. Mivel a jelszót manuálisan kell megadni, amit csak addig őriz meg a gép, amíg be nem csukod a makrót tartalmazó füzetet. De hát te tudod.
Na most ha mindenképp el akarod kerülni, hogy a jelszót tartalmazó változó hozzáférhető legyen, használhatod az első változatot is.
Manuálisan bekéred a forrásfilet.
Amit az elindított makró azonnal visszament valami kiegészítéssel és bezár, majd rögvest megnyit. Ekkor persze újra bekéri a jelszót. De innentől van egy forrásfile duplikátumod új névvel, amin megcsinálhatod a generált listádat, majd Mentés másként-tal tetszőleges névvel lementheted. Ez a file is védett lesz az eredeti jelszavakkal.
Köszönöm. Ez a megoldás az én agyamon is átvillant egy pillanatra. És persze működne is. De azért nem akartam alkalmazni, mert szerettem volna elkerülni, hogy függetlenítsem a rendszertől a jelszó bekérést. Érzek benne némi biztonsági veszélyt is. Ilyen megoldást csak a legvégső elkeseredésemben fogok alkalmazni.
Kicsit körbejártam a problémádat és oda jutottam, hogy amig nem oldódik meg password property beállítása az alábbiakat lehetne csinálni:
Ha a célfile-d az átírt forrásfüzet, akkor nem kell foglalkozni a jelszókkal, mert a Mentés másként megtartja a füzet védett státuszát, és a jelszavakat is.
Ha meg a generált listád új füzetbe kerül akkor az alábbi makrók is megfelelők lehetnek. Ezekben a forrásfile bekérése nem a normál módon történik, hanem inputboxokkal, amelyekkel megadod a forrasfilenevet, meg a jelszavakat, ez utóbbiak így megőrződnek a mentésekhez, hogy ott csak a célfilenevet kelljen megadni.
********
Dim forrasfile$, celfile$, pw1$, pw2$ ’ modulváltozók lesznek tehát a makrókon kívül helyezd el őket
Az én programom nem látja a jelszavakat. Azokat az Excel kéri be az általam nem kezelt rendszeren keresztül. (Próbáld ki! Védj le egy adatfájlt, majd nyisd meg egy másik munkafüzetben lévő makróval. )
Én csak annyit tudok tenni, hogy a hibakezelő rendszer segítségével megakadályozom, hogy rossz kód esetén az Excel angol nyelvű hibával leálljon. Sőt vissza tudom küldeni (éppen egy korábban Jimmy által javasolt technikával), hogy adja meg újr a jelszót.
Szóval az excel nem teszi lehetővé - nagyon helyesen -, hogy a programom "lássa" a jelszót. Enélkül könnyű lenne kicselezni a jelszavas védelmet.
Tehát én pusztán azt szeretném, amit a microsoft állít erről a password property tulajdonságnál (http://msdn.microsoft.com/en-us/library/office/aa224992(v=office.11).aspx), hogy visszaadja és beállítsa (returns and sets the password) az egyik munkafüzet objektumból kiolvasva, és a másikban beállítva az - általam ismeretlen - jelszót.
És az miért nem jó, hogy amikor a megnyitáskor kéri a file a jelszavakat, nem csak a filet nyitja meg velük, hanem elhelyezi őket 2 változóba? Amiket aztán az újonnan generált filek mentésekor felhasználhat.
A program egy adatfájlt nyit meg. Azt előzőleg a felhasználó közvetlenül a beállítások menüben védte le 2 jelszóval. Az olvasási és az írási használatával. Amikor pedig a program megnyitja a fájlt, a rendszer ugyanúgy bekéri a jelszót(szavakat), mintha program nélkül nyitnád a fájlt. És ezeket a jelszavakat szeretném - nem kiolvasni, csak továbbítani a program által generált listafájloknak. Hogy azokat is csak ugyanazokkal a jelszavakkal lehessen nyitni, amit a felhasználó pötyög be.