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.
Szia Delila_1! Igen, elvileg már sokat használtam makrót úgy hogy Personal-ba volt lementve... De a gondom az, amit leírtam SQL-nek...
Hogy ha Personalba mentem akkor az Új fájl helyett a personalt mentegeti nekem. Ha viszont a munkafüzethez kapcsolom a macrót, akkor meg jól működik...
És makróval hogy lehetne azt megoldani, hogy mondjuk egy nyomógombbal indítom el a cellában lévő értéket, mondjuk 1-el kezdödjön, és mondjuk 1500-ig helyettesítse be a számokat, amik csak pozitív egész számok lehetnek, és növekvő sorrendben 1,2,3,4,5....1498,1499,1500 és ha a behelyettesítéskor mondjuk a C2-es cella értéke 1-re változik, akkor álljon le a számok behelyettesítése?
Van egy munkalapom, ahol a DL2 cellába kellene behelyettesíteni a számokat 1-1500-ik, és van a DK1 cella amiben bizonyos feltételek teljesülése esetén 0-ról 1-re változik.Azt szeretném, hogy az 1-el inditott behelyettesítés addig menjen, mig a DK1 cella értéke 0-ról 1-re nem változik.Az 1500 számig terjedő behelyettesítésre akár 3 ilyen is előfordulhat, hogy a DK1 cella 0-ról 1-re változik, de van olyan is amikor csak 1-szer, meg olyan is, amikor egyszer sem, ezért nem jó nekem a célértékkeresés.A DK1 cella egyébként egy HA függvényt tartalmaz, ami sok cella értékét figyeli, és ennek csak 0 vagy 1 az értéke.
Nem értem. Ebben az esetben egy sima összeadás/kivonással ki lehet számolni a B2 cella értékét - hogy a C2=1 legyen =J1-H1-G1-F1
vagy: 1. Célérték keresés vagy 2. Solver (A bővítményeknél be kell kapcsolni) vagy 3. Makró számolós ciklussal 4. Makró, aminek kivanja a J1-H1-G1-F1 cellák értékét egymásból és visszaadja a B2 cellának :)
Van egy munkalap, ahol van egy léptető. A léptető 1-től több ezerig terjedhet.Ez a léptető a B1 cellához van rendelve.
F1 cella 112 G1 cella 21 H1 cella 33 értékekkel rendelkezik.
J1 cella a 281-es értékkel rendelkezik
C1 cellában a képlet : =SZUM(B1;F1;G1;H1) C2 cellában a képlet : =HA(C1=J1;1;0)
A munkalap:
A kérdésem az lenne, hogy hogyan lehet azt megoldani, hogy a léptető, vagy esetleg nyomógombbal elinditani a B2-es cellát 1-től, és addig léptetné magától, mig a C2 cella értéke 1-re nem változik.És ennek hatására megállna a léptető.Vagy esetleg nyomógomb hatására indulna el a léptető álltal vezérelt cella, és a C2 értékének 1-re váltása hatására állna meg. Ezt meg lehet oldani?
ha egy képletet tartalmazó cellára szeretnél adatérvényesítést, akkor pl. az adatérvényesítésben ugyanazt a képletet kell megadnod, ami a cellában van. (Adatérvényesítés --> "Egyéni")
"ez a szubrutin egy "...beforedoubleclick" eseménykezelőben van, amit nem tudok a szokásos call paranccsal meghívni."
Nem biztos, hogy nem tudod. Ha például
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'kód End Sub
helyett az eseménykezelőd így néz ki:
Public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'kód End Sub
akkor simán meghívható például így:
Sub hívás Munka1.Worksheet_BeforeDoubleClick Range("A1"), False End Sub
Feltéve, hogy a Munka1 kódnevű munkalaphoz tartozik. A szubrutin belsejétől függően fontos lehet, hogy a Range("A1"), False paraméterek helyén mit adsz meg.
"...és egyszerűen meg kellene hívni az XYZ szubrutint"
Bocsánat, erre még nem reagáltam: azt is megpróbáltam, hogy meghívom, de ez a szubrutin egy "...beforedoubleclick" eseménykezelőben van, amit nem tudok a szokásos call paranccsal meghívni.
Azért szeretném (szerettem volna) meghívni makróból a szubrutint, mert az egy többlépcsős makró lett volna, összesítve a különböző, egyébként önállóan működni képes szubrutinokat. Így nem marad más hátra, mint a "...beforedoubleclick"-be írt szubrutint átmásolom egy sima, nem eseménykezelős makróba (amit sajnos még át kell szerkesztenem, hogy így is futni tudjon), és ezt hívom meg az összesítőbe.
Az a bajom, közben rájöttem, hogyha egy cellába csak beírom az adott értéket, amire adatérvényesítést kérek, akkor minden jól működik.Da ha egy olyan cellára kérem, ami több más cellából ad ki eredményt, azaz képletet tartalmaz, akkor már nem müködik az adatérvényesítés.Nekem erre a cellára kellene.Azaz ha a cella értéke több másik cellával összefüggésben olyanra változik amelyre szeretném, akkor az adatérvényesítés figyelmeztessen.
Az adatérvényesítést próbálgatom, de nem tudom beállítani.Ha ott bejönne egy ablak, az jó lenne, de nem tudtam megcsinálni adatérvényesítéssel. Hogy kell azt beállítani?
Igazad van, az Application.DoubleClick tényleg nem csinál semmit (legalábbis semmi láthatót). A kérdés inkább az, miért akarod VBA kóddal emulálni a dupla kattintást. Mert ez most így néz ki (ha jól értem):
1) emulálod kóddal a duplakattintást, 2) erre a DoubleClick eseménykezelő lefut, 3) és meghívja az XYZ szubrutint.
Az első két lépés simán kihagyható lenne, és egyszerűen meg kellene hívni az XYZ szubrutint.
A Personal.xls úgy jött létre, hogy egy makrórögzítésnél a makró helyénél az "Egyéni makró-munkafüzetben" opciót választottad. Amelyik makrót a personalba írod, az minden megnyitott füzetben futtatható, mert ezt a fájlt az Excel indításkor betölti, háttérben. Ez kiválóan alkalmazható, pl. arra, hogy egy kijelölt területet bármelyik füzetben egy kattintással a kedvenc formátumodra alakítsd.
Ha a modullapon a makrók fölött beállítod az SQL által említett Option Explicit-et, futtatáskor azonnal kapsz egy üzenetet, ha dimenzionálás nélküli változót akarsz alkalmazni (UjNeve).
Szia! Nagyon köszönöm a válaszod! Az a jel ott volt a macroban, nem is értem hogyan sikerült ezt rosszul bekopiznom. Viszont nagyon köszönöm ezt az tippert használni fogom.
Igazánból valami nagyon fura dolgot műveltem a makróval, amit abszolút nem értem. Létrehoztam egy PERSONAL nevű fájlt a próbálgatásaim során...de én nem akartam...:-D Szóval szerintem az excel tényleg nem értte mi az aktív munkafüzet.
Azt szeretném még kérdezni, hogy ha ezt a makrót szeretném több ember számára hozzáférhetővé tenni azt hogyan tudom.
A makróm, ami egyébként 99%-ban kész /nagyon éleveztem :-D/ úgy kéne működnie, hogy külön gépeken te tudják futtatni...
Ezt hogyan tudom praktikusan megoldani? Lehetne template-tel, de itt ez nem jöhet szóba.
Itt alapban a bal oldalon látható felületen keresd meg a "Modul" lapokat, amelyekre dupla kattintással megnyílik egy szkript, amit kézzel ki tudsz törölni. (Ha nincs levédve jellszóval...)
A makrót hogy tudom kitörölni egy dokukmentumból? (Office XP-t használok). Az Eszközök/Makrók/Makró menüpontban ha kijelölöm a makró nevét, a Törlés gomb szürke, nem lehet törölni.
A fájlnév megadásakor UjNev a változód neve (helyfoglaláskor is), mentéskor UjNeve. Mivel az UjNeve értéke üres string, nem tudja elmenteni. Egy betű ilyen galibát okozhat.
A ThisWorkbook mindíg az a workbook, ami a kódot tartalmazza, szóval a definiálással nincs gond.
A probléma az lehet, hogy utána az ActiveWorkbook object-tel akarsz valamit csinálni, de lehet, hogy az új Workbook-ot nem activáltad.
Az új workbook-ot a kód futása közben hozod létre, mert akkor a következő technikát ajánlom:
Dim UjWorkbook as workbook (itt csak definiálsz egy object-et amit később fogunk használni) Set UjWorkbook = workbooks.add (innentől az új workbook-ra bármikor hivatkozhatsz, mint 'ujworkbook', igy sose keveredsz bele, hogy éppen melyik workbook-kal csinálsz dolgokat ... (kód többi része) ujworkbook.saveas ... (innen az jön amit eddig is csináltál, csak a bizonytalan Activeworkbook helyett a tuti ujworkbook object-et hivatkozod a kódban).