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.
Kérdés. a makróban nem a Sheets("munkalapneve") módon szeretném megszólítani a munkalapot, mert az változik. Az sem jó ha változóba rakom a munkalap nevét.
Meg lehet vhogy szólítani azzal a megnevezéssel, ami a munkalap tulajdonságainál van a Microsoft Excel Objects-en belül) vhogy így: munka1(munkalapneve) munka2(munkalapneve) stb... és én pl a munkax-el szeretném megszólítani, mert az állandó.
Azt a minimális makrót amit az új munkafüzetbe átmásolok azt már nem akarom kitörölni, sőt az szükséges az új munkafüzet működéséhez. Csak elrejteni/levédeni szeretném. :o)
Foglalkozva a témával egy gondolat már felötlött bennem ma reggel, de még nem próbáltam ki. Létrehozok egy üres de levédett munkafüzetet (kézzel) és ezt nyitom meg a programból, ebbe másolom bele a munkafüzetet majd mentem más néven. Nem túl elegáns, de ha működni fog és nem lesz jobb ötlet akkor ez lesz.
Egy dologban biztos vagyok: Az újonnan létrehozott munkafüzetekből ki lehet törölni a makrót. (Makróval) Ha lesz időm utánanézek a mikéntjének, de úgy emlékszem itt is szó volt már erről.
A mentés SaveAs-al történik, de a munkafüzet létrehozása nem.
A Sheets("xxx").Copy hatására az adott munkalapot egy vadi új "szűz" munkafüzetben hozom létre és ennek a VBAprojekje alapértelmezésként nem védett.
A feladat, amit már megoldottam, hogy egy összetett munkafüzetből különböző felhasználói beállításokkal hozok létre több százas nagyságrendben új munkafüzeteket melyek mindegyike más mennyiségű és adattartalmú munkalapot tartalmaz. Ezen munkalapokon vannak gombok és vezérlő elemek, melyekhez makrók tartoznak és mivel sajnos új munkafüzetbe másolom azokat, így alapértelmezésként láthatóak és szerkeszthetőek.
Egy ideig a saját munkafüzetemet mentettem el SaveAs-al minden esetben, a nem szükséges munkalapok elrejtésével, ekkor ez nem volt probléma mert a saját munkafüzet projektje védett, de már túl nagy méretű munkafüzetek lettek. Ezért kellett váltanom, hogy csak a szükséges és elégséges mennyiségű adatot hozom létre egy új munkafüzetben.
A 3 cellát kijelölve a formátumban az igazításnál, vízszintes elrendezésnél "A kijelölés közepére" formát kell választani. Mivel ezt sűrűn alkalmazom, írtam egy kis makrót rá (a personal.xls-ben), és egy ikonthoz rendeltem, hogy mindig kéznél legyen.
Sub Kijelölés_közepére() Selection.HorizontalAlignment = xlCenterAcrossSelection End Sub
Nem kézzel kell beállítanom. Azt ismerem. Fut egy program, ami létrehoz egy új munkafüzetet, belemásol egy munkalapot amin makrók is vannak, majd elmenti és bezárja. Még mentés előtt ebből a futó programból kellene levédeni ezt az új munkafüzetet.
Sziasztok! Ismét egy kis segítség kellene. Egy munkafüzetben lévő makróból hozok létre és mentek le más munkafüzeteket. Ezeknek az új munkafüzeteknek a lapjain találhatóak gombok és egyéb objektumok a hozzájuk tartozó kódokkal együtt. Viszont ezek a kódok megtekinthetőek, átírhatóak. A futó programból ennek a másik munkafüzetnek a VBAprojektjére be lehet állítani jelszót? Gyanítom hogy nem, de akkor valahogy le lehet védeni a makrókat?
Az a módszer, hogy a cellákat összevonjam, ahol nincs szükség a 3 külön adat bevitelére (mert ezek vannak nagytöbbségben), sok igazítással és macerával járna, tehát nem szimpatizálok vele.
na, köszi sikerült. Úgy csináltam, hogy oszlop celláit felpakoltam 1-esekkel és részössszeggel (ami változik a szűréssel együtt) figyeltem egy másik cellában.
Nem rossz. Nekem más volt az alapötletem, de a tied jobban tetszik. Viszont a játékomat meg elrontottad, mert kész kódot írtál be. :) Mindjárt ki is próbálom.
Ezen már én is agyaltam tegnap, sőt, egy picit még kutattam is a témában... A munkalap események közül talán a Worksheet_Calculate használható, de ekkor a kérdéses munkalapra fel kell venni egy függvényt pl. MA(). Ezt ugye minden munkalap eseménynél frissíti...
Szóval, ha felteszel egy tetszőleges függvényt, akkor megoldás lehet ez:
Private Sub Worksheet_Calculate() Dim x As Byte Dim s As String
If ActiveSheet.AutoFilterMode = True Then ' ha a munkalapon az autoszűrő aktív For x = 1 To ActiveSheet.AutoFilter.Filters.Count If ActiveSheet.AutoFilter.Filters(x).On Then ' itt nézzük meg, hogy aktív-e valamelyik s = Mid(ActiveSheet.AutoFilter.Filters(x).Criteria1, 2, Len(ActiveSheet.AutoFilter.Filters(x).Criteria1)) MsgBox "Indulhat a program, a(z) " & x & ". szűrő aktiválva, értéke: " & s End If Next x Else: MsgBox "Autoszűrő kikapcsolva" End If
Szia, Még arra van megoldás, hogy ne kelljen egy gombot sem megnyomni, hanem ha változik valami az autofilterben akkor hajtódjon végre? (a munkalap események nem a legjobbak sajnos, mert a szűrő váltásakor kell végrehajtódnia a makrónak (Ez egy sima for each ciklus, ami a soron megy végig és elrejt bizonyos oszlopokat) Nem kell kész kód, csak vmi pseudo - mert különben elveszed a játékomat. :)
Hálás köszönet, a dőlt betűs első sorod tartalmazza a lényeget. Nagyjából fél órát keresgéltem erről egy régebben látott összefoglalót, de nem tudtam konkrétan mire keressek. Most, hogy megírtad, rögtön meg is találtam :) Köszönöm még egyszer a segítségedet.
A kiemelt bold rész tartalmazza az értéket. Próbáld ki a Mid függvény nélkül is így:
s = ActiveSheet.AutoFilter.Filters(x).Criteria1
------------------------------------------
Sub Autoszűrő2() Dim x As Byte Dim s As String
If ActiveSheet.AutoFilterMode = True Then ' ha a munkalapon az autoszűrő aktív For x = 1 To ActiveSheet.AutoFilter.Filters.Count If ActiveSheet.AutoFilter.Filters(x).On Then ' itt nézzük meg, hogy aktív-e valamelyik s = Mid(ActiveSheet.AutoFilter.Filters(x).Criteria1, 2, Len(ActiveSheet.AutoFilter.Filters(x).Criteria1)) MsgBox "A(z) " & x & ". szűrő aktiválva, értéke: " & s End If Next x Else: MsgBox "Autoszűrő kikapcsolva" End If