-
Fototrend
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
ROBOTER
addikt
Sziasztok!
Adott sok érvényesített cella. Sok ismétlődés lehetséges, ezért a felhasználónak megengedem, hogy vágólappal másoljon közöttük. Mivel a bemásolt érték tagja az érvényesítési listának, az excel elfogadja. Viszont amikor a makróból kiolvasom a .value értékét, üreset ad vissza több esetben, de nem jöttem rá még, hogy miért, mitől függ. Ha rámegyek a legördülő listára, a cella pillanatnyi tartalmának megfelelő listaelem van kijelölve a listában (ahogyan kell), ha rákattintok a listában, a cella tartalma természetesen változatlan marad, de akkor a makró is látja.
Lehet az irányított beillesztésben (csak érték) van a különbség?
-
ROBOTER
addikt
Sziasztok!
Adott egy munkalap, amin rengeteg képlet van, és több felhasználó használja, ezért a cellák jelentős része védett. Az oszlopok dinamikusan keletkeznek, sok van belőlük, ezért csoportosítva vannak, ez eddig működik.
Hogy tudnám megadni a jogot a felhasználónak, hogy becsukhassa vagy kinyithassa a csoportokat anélkül, hogy jelszót adok neki?
A változásokat úgy kezelem, hogy ha a makró védett cellát írna, előtte feloldom, átírom, újra levédem. Jól működik. De tudom érzékelni az eseményt, hogy csoportot akar összecsukni, vagy kinyitni? Mert akkor annak az eseménynek a kezelőjében meg tudnám tenni a feloldást.Köszi!
-
ROBOTER
addikt
válasz
ROBOTER
#43594
üzenetére
Bocs, egy kicsit zavarosan írtam le. Szóval ha két ujjal nagyot görgetek a touchpad segítségével, akkor a cellakiválasztás "ott marad" és nem működik a cellakiválasztás. Ha hozzáérek a scrollbarhoz, akkor visszaugrik oda, ahol a kiválasztott cella állt az előbb, és működik minden. Ha a scrollbarral scrollozok tovább, semmi gond. Tiltható ez?
-
ROBOTER
addikt
Üdv!
Mi a neve annak a jelenségnek, amikor "suhintok" a notebook touchpadjén, és nagyon sokat gördül a táblázat lefelé (3000 soros a táblázat)? Ilyenkor nekem a selection sem megy, a kiválasztott cella ott ragad valahol feljebb, nem enged kattintással új cellát választani a látható laprészleten. Természetesen ilyenkor az selectionchange és egyéb eseményekben a target.row/address stb. az ott ragadt selection értékét adja.
-
ROBOTER
addikt
válasz
Fferi50
#43516
üzenetére
Elmondom mivel szívtam és miért nem akartam a szubrutint a sheethez kötni.
Volt egy megmagyarázhatatlan hiba, és órákon át kerestem, nem jöttem rá mi az.
A következő volt: egyik sheet makrójából hívom a másik sheet publikus rutinját, és hibajelzés után a DEBUG a rutin hívását mutatja, nem a meghívott sub hibás sorát. Abban volt egy rossz hivatkozás egy névvel ellátott tartományra, ez volt a gondja. Csak abban nem kerestem, mert a VB szerkesztő nekem a hívó sort sárgította ki. Azt hittem rosszul hívom, rosszul adom át a paramétert vagy nem is lehet így keresztbe hívni sheetek között stb.Most már minden működik.

-
ROBOTER
addikt
Újabb "érdekes" kérdés:
Makróból létrehozok egy új munkafüzetet, belemásolok több munkalapot és elmentem. Eddig működik. Viszont a lapok közötti interakciót biztosító makró "globális" szubrutinokat használ, amelyek egy modulban vannak.
Lapok mellé el lehetne menteni egy kiválasztott modult is? Találtam az Interneten megoldást, de valami brutálisan bonyolult volt.
-
ROBOTER
addikt
válasz
Fferi50
#43499
üzenetére
Írtam privit.
Más: nem makróban, hanem simán Excelben cella/tartomány névadásakor meg tudom mondani, hogy az workbookon vagy csak adott worksheeten értelmezett név legyen? Makróban ez simán megy, használom is. pl:
thisworkbook.names.addvs.activesheet.names.addExcelben úgy látom, hogy alapból workbookra vonatkozik.
-
ROBOTER
addikt
válasz
Fferi50
#43495
üzenetére
Alapvetően már nem erről a helyzetről beszélek, hanem a fejlesztési folyamatról.
Van egy komolyabb Sub, ami a munkafüzet betöltésekor felépít egy rakás értéket, amire az egész rendszernek szüksége van, rengeteg helyen..
Írok valamit, tesztelem, írok valamit, tesztelem. A teszt során nem szeretném újraindítani azt a Sub-ot, ami Workbook Open-nél fut le. Kitettem egy ideiglenes gombra, hogy ha "anomáliát" tapasztalok, akkor megnyomom, és minden működik. De egyrészt ez baromi kényelmetlen, másrészt lassú. Elvesznek bizonyos változók, logikát még nem találtam benne.
De igazából mindegy, mert a megoldás valószínűleg ugyanaz: munkafüzetben tárolni ezeket.
-
ROBOTER
addikt
Üdv!
Kb. 2 hete beszélgettünk a globális változókról, a tartalom elvesztéséről pl. amikor a kód módosul, vagy hibával leáll, tehát fejlesztési időszakban.
A munkafüzetem induláskor elég hosszadalmas folyamatot hajt végre, több táblához hozzányúl egy központi helyen, elemez, bemásol belőlük. Tehát az, hogy minden változtatás után "újraindítom" a munkafüzetet finoman fogalmazva nem hatékony fejlesztési módszert ad.
Mi a megoldás? A globálisnak szánt változókat is a munkafüzetben tárolni? Ezt csináltam az elején, aztán részben elvetettem, most pedig újra ezt látom csak megoldásnak.
-
ROBOTER
addikt
Szia!
Továbbra is gondom van ezzel az implicit intersectionnel.
Időnként hibát dob, nem tudom elkapni/beazonosítani az okot.
Létrehozok egy sheetet, történik rajta egy esemény (az első oszlopban kiválasztok egy elemet egy listából), ekkor jön ez a sor:
Range("KÖLTSÉG").Cells(rowID, 1).Formula = "=EGYSÉGÁR*MENNYISÉG"Application-defined or object-defined error jön a fenti sorra, majd az Excel bezáródik és újraindul Majd kitöltök utána 10 sort alá, és tökéletesen működik, sőt az első sornál ha újra meghívódik a képlet beíró Sub, az is működik.
Ki lehet kerülni? Lehet úgy képletet tölteni a formula tulajdonságba, hogy az névvel ellátott oszlopokra hivatkozik, de tartalmaz sor-koordinátát? Vagy maradhatna, de mi lehet a gond?
-
ROBOTER
addikt
válasz
Fferi50
#43313
üzenetére
Pferi50 és Delila_1: Köszönöm, összeraktam a segítségetekkel. Csináltam egy próbát, egyik lapon a lista, másikon az érvényesített cella, ami nem zárolt, de a lapot levédtem, és automatikusan bővül a lista
Pferi50:
ACOUNTA(AUX2!$A$2:$A$1000)-t kicseréltemCOUNTA(AUX2!$A:$A)-1-re. Próba szerint hibátlan.Ide kapcsolódik: Ha makróból definiálok egy nevet, feltételezem az a füzet bezárása és visszatöltésa után újra élni fog. Érdemes az újratöltéskor törölni, vagy ha már létezik a név, úgyis felülírja?
-
ROBOTER
addikt
válasz
Fferi50
#43303
üzenetére
Köszi!
Kipróbáltam, de valami mással van a baj.
Érvényesíteni próbálok egy cellában, lista hozzáadásával. És csak ezt nem engedi.
A cella nem zárolt. Kézzel enged hozzányúlni.s = "=AUX2!$A$2:$A$" + CStr(rowCount)With Range("PARTNER").Cells(Target.Row, 1).Interior.Color = RGB(0, 200, 0) 'csak próba, működikEnd WithWith Range("PARTNER").Cells(Target.Row, 1).Validation.Delete' a következő sorra hibát ad:.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=sEnd WithDe makróból csak akkor engedi a validationt állítani, ha unprotected a sheet. Viszont engedi átszínezni vagy hasonlót.
Ha beteszem a fenti kód elé, hogy
ActiveSheet.Unprotect...akkor megy, és jól megy. Megcsinálhatom, hogy minden makró elejére és végére beteszek 1-1 protect/unprotectedet, de nem túl elegáns. -
ROBOTER
addikt
Üdv!
Ha egy sheet bizonyos celláit zárolom, másokat pedig nem, majd a lapot védetté teszem, van különbség aközött, hogy a táblázatban vagy VBA-ból akarom módosítani a cellát?
Védett lapon VBA-ból hibát ad akkor is, ha nem lockolt cellához nyúlok, viszont kézzel jól követi a locked/unlocked állapotot, hiba nélkül. Amit lehet átírhatom, amit nem lehet, azt nem engedi. Ha újra feloldom a sheetet, akkor VBA-ból is újra enged módosítani minden cellát.
Hogy van ez?
-
-
ROBOTER
addikt
válasz
Fferi50
#43290
üzenetére
Na jó, de nem a VBA hivatkozással van baj.
Az működik, egyébként nem írná be a cellába. De beírja a kívánt helyre, ezzel nincs baj.De mit írjon be? Hogy kell képletben (nem VBA-ban) hivatkozni egy nevet kapott oszlopra? Pontosabban annak cellájára? Hogyan tudom azt mondani, hogy =újoszlopnév2 vagy =újoszlopnév$2 ?
-
ROBOTER
addikt
válasz
Fferi50
#43288
üzenetére
Írok példát:
ActiveWorkbook.Names.Add Name:="névA", RefersTo:="=$A:$A'ActiveWorkbook.Names.Add Name:="névB", RefersTo:="=$B:$B'ActiveWorkbook.Names.Add Name:="névC", RefersTo:="=$C:$C'Ez most működik, ha az oszlopra kattintok, a név mezőben megjelenik az általam adott név.
majd más subban:
Range("névC").Cells(adottsor, 1).Value = "=névA*névB"
Ez nem ad hibát, a képletet beírja. Csak "#KIBONTÁS" jelenik meg eredmény helyett.
Odaírnám én a "névA" és "névB" után, hogy $1...X, de nem fogadja el.De ismétlem, lehet az egész kínlódásom hibás, mert ha van egyszerűbb mód a kód rugalmassá tételére, akkor felesleges elnevezésekkel bajlódni. Csak most kezdtem a VBA-t.
-
ROBOTER
addikt
válasz
Fferi50
#43285
üzenetére
Köszi, az átnevezés így működik
A képlet viszont még nem.
Ugyanez a képlet simán megy kézzel beírva, ha kézzel hozom létre a neveket.
Szerk:
Bocs, valamit nem vettem észre. Ha kézzel beírom a képletet az oszlop első cellájába, nem csak az első cella, hanem az egész oszlop felveszi az értéket.Azt hiszem vissza kellene térnem az alapkérdéshez: ha nem akarok fix koordinátákra hivatkozni, hanem fel akarom készíteni a kódot a táblázat változásaira, a névadás a jó módszer?
-
ROBOTER
addikt
Bocs, folyamatosan jönnek a kérdések.
Szeretnék betűjel helyett a kódban névvel hivatkozni oszlopokra, mert menet közben lehetnek új oszlopok.
Ha "kézzel" elnevezek egy teljes oszlopot és rögzítem makróként, akkor azt rögzíti, hogy
RefersToR1C1:="Munka1!C1"ha pl. a "A" oszlopot nevezem el. Ha elnevezem az első két oszlopot és beírok egy képletet, pl. a harmadik oszlop bármelyik cellájába, hogy=elsőújnév * másodikújnév, simán működik. Sort nem kell megadni, csak az oszlop nevét, és minden cellára működni fog.Ha ugyanezt VBA-ból teszem, nem nevezi át az oszlopot.
De haRefersTo:="A:A"-t, írok, akkor az oszlop neve megváltozik.
EkkorRange("újnév").Cells(sor,1)-gyel tudok hivatkozni bármelyik cellájára, ez működik.
Viszont ekkor ha képletet szeretnék beírni, ami általam adott nevet tartalmaz, hibát ad. Nem engedi beírni a mellette lévő oszlopba, hogy=újnév*2Vagy van más megoldás erre, hogy a kód rugalmas legyen, és ne zavarja oszlopok beszúrása akár programozási időszakban, akár a felhasználó által?
-
ROBOTER
addikt
Hogyan oldanátok meg a következőt:
Van egy oszlop, aminek a cellái csak listából választhatóak. Ez a lista 3000 elemet tartalmaz, tehát normál drop-down nem jöhet számításba. Ráadásul ez egy gyakran használt oszlop.
A lista elemeit kategóriákba rendeztem, tehát pl. nagyságrendileg 30 kategória, egyenként 100-100 elemmel.Amit kipróbáltam és nagyon tetszik: egy sheet ami csak a kiválasztást szolgálja, SelectionChange-re aktiválódik. Egyik oszlopban a kategória, másikban az elem. Az elemlista frissül, elem kiválasztása után újra aktiválódik az eredeti sheet. Eddig ok, csak ha görgetek, a kategórialistát kigörgetem a képernyőből, hiszen sokkal több az elem, mint a kategória. Meg lehet osztani valahogy a sheetet, hogy a bal oldala ne gördüljön (függőlegesen).
Másik verzió: popup, egyedileg tervezve
Szerintetek?
-
ROBOTER
addikt
Bocs, no text, rájöttem.

-
ROBOTER
addikt
válasz
Fferi50
#43262
üzenetére
Az dinamikusan létrehozott laphoz tartozó eseménykezelőt leredukáltam 2 sorra (SUB-END SUB). A hiba így is fennáll:
Sub writeCode(sheetCodename As String)'új laphoz rendelt eseménykezelő létrehozása programkód dinamikus beírásávalDim c As Long'nem a munkalap szimbolikus nevére, hanem a kódnevére van szükségünk, ezért a sheetCodename ezt tartalmazzac = Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule.CountOfLines' maga a kód egy stringben tárolvamyCode = ""myCode = myCode & vbLf & "Private Sub Worksheet_Change(ByVal Target As Range)"myCode = myCode & vbLf & "End Sub"'programkód beírása a forráskódba, amely az új munkafüzethez tartozikWith Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule.InsertLines c + 1, "'dinamukusan létrehozott programkód".AddFromString myCodeEnd WithEnd SubHa nem hívom meg ezt a Sub-ot, a hiba megszűnik.
-
ROBOTER
addikt
válasz
ROBOTER
#43260
üzenetére
Bocs, lejárt a szerkesztési idő. A writeCode így folytatódik:
With Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule.InsertLines c + 1, "'dinamukusan létrehozott programkód".AddFromString myCodeLehet az AddFromString rossz helyre szúr be és a változók memóriaterületére ír?
-
ROBOTER
addikt
Ok, megvan a hiba forrása, a megoldása viszont nincs.
Dinamikusan írok eseménykezelőt (ahogyan lentebb Delila_1 ajánlotta, és ami tökéletesen működik) új lap létrehozásakor az új laphoz. Ha ezt kiiktatom, megszűnik a hiba.
Sub writeCode(sheetCodename As String)Dim c As Long'nem a munkalap szimbolikus nevére, hanem a kódnevére van szükségünk, ezért a sheetCodename ezt tartalmazzac = Application.VBE.ActiveVBProject.VBComponents(sheetCodename).CodeModule.CountOfLines' maga a kód egy stringben tárolvamyCode = ""myCode = myCode & vbLf & "Private Sub Worksheet_Change(ByVal Target As Range)"...... -
ROBOTER
addikt
válasz
Pakliman
#43258
üzenetére
Nem a cella értékét iratom ki az MsgBox-ban, hanem a globális változó értékét. Az törlődik.
Az érintett változóban a cella neve (B11) szerepel, nem a tartalma.
A newSheetNamePos nem szerepel a kódban sehol, kereséssel néztem át. És többször átírtam a nevét abban a 3/4 sorban, hogy hibát dobjon, ha esetleg benne hagytam valahol. De semmi változás. Létrehoz egy sheetet, működik, létrehozná a következőt, és nincs tartalma a változónak.
Valamit nem tudok a VBA-ról, amit tudnom kellene a globális változók terén.
-
ROBOTER
addikt
válasz
Fferi50
#43256
üzenetére
Szia!
Biztos valami faék hiba lesz, mert ennyire hülye nem lehetek, de nem jövök rá.
Nincs
Option ExplicitutasításModule1:
Public newSheetNamePos As StringPublic defaultSheetName As StringSub MyStart()defaultSheetName = "ÚJ NÉV"newSheetNamePos = "$B$11"Worksheets("START").Range(newSheetNamePos).Value = defaultSheetName......Thisworkbook:
Private Sub Workbook_Open()Module1.MyStartEnd SubSTART:
Private Sub Worksheet_Change(ByVal Target As Range)MsgBox Target.Offset.Address & " ---- " & newSheetNamePosIf Target.Offset.Address = newSheetNamePos ThennewSheetEnd IfEnd SubA Change, amikor megnyitás után először hívódik, mert változás történik a START lapon, a feltétel két oldala azonos, ellenőrzésképpen van benne az MsgBox, és ugyanaz van a két oldalon, tökéletesen működik. Amikor új változás van a START lapon, és újra hívódik a Sub, a newSheetNamePos üres. A szó sehol nem szerepel más helyen a kódban.
-
ROBOTER
addikt
Mi okozhatja, hogy egy globális változó (Module1-ben létrehozott
Public xxx As String) menet közben elveszíti tartalmát?Induláskor (Workbook_Open) kap egy értéket, soha többé nem, a szó nem is szerepel a kódban soha többé értékadásként. Kiolvasom egy esemény során, jó értéke van. Újra jön az esemény, és nincs értéke.
Üres. Az egész kódban sehol nem szerepel, nincs typo, tök bonyolult neve van. Nem értem. -
ROBOTER
addikt
válasz
Delila_1
#43204
üzenetére
Egy kérdés még a korábbi ügyhöz kapcsolódóan:
Minden jól működik, de ha új sort szúrok be (nem VBA-ból, hanem simán a lapon), akkor a kód a
If Target.Value = "valami" Thenrésznél Type mismatch hibával leáll. ATarget.Rowaz újonnan beszúrt (üres) sort adja. ATarget.Columnpedig 1-et (mindig). Nekem meg pont az első oszlopban van a vizsgálandó tartalom. Oké, átrakhatom másik oszlopba, de nem túl elegáns. Meg tudom valahogy különböztetni az eseménykezelőben, hogy ez most új sor beszúrása miatt hívódott-e meg, vagy csak sima cellaváltozás miatt? -
ROBOTER
addikt
válasz
Delila_1
#43204
üzenetére
Azt szeretném kérdezni, hogy egy dinamikusan létrehozott új worksheethez hogyan tudom a makrót hozzárendelni? Tehát van egy gombom, megnyomom, létrejön egy új sheet, azt agyba-főbe formázom (eddig jól működik), és a sheethez, és az azon létrehozott gombokhoz szeretnék eseménykezelőket rendelni (Change stb.), runtime.
-
ROBOTER
addikt
Üdv!
A következőt kellene megoldanom:
Adott egy oszlop, a benne lévő cellák 2 értéket vehetnek fel (igen/nem).
- ha igen, a mellette lévő cella gördülő listás legyen
- ha nem, a mellette lévő cella szabadon beírható tartalmú legyen
Hogyan oldható ez meg? (természetesen a legördülő lista most is működik, ezt kellene kiegészítenem, hogy feltételes legyen)Előre is köszi az ötleteket.
Új hozzászólás Aktív témák
- Linux kezdőknek
- 3D nyomtatás
- TCL LCD és LED TV-k
- Milyen okostelefont vegyek?
- Geri Bátyó: Agglegénykonyha 14 – Kések, késélezés
- Elden Ring
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Gyúrósok ide!
- Meghozta az első, memórapánikból eredő áremelését az NVIDIA
- Apple MacBook
- További aktív témák...
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Vírusirtó, Antivirus, VPN kulcsok GARANCIÁVAL!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- iKing.hu Apple iPhone 14 Pro Silver 128GB használt szép állapot 95% akku 6 hónap garancia
- Veszünk: PS5 Fat/Slim/Digital/Pro konzolt, játékokat, Portalt stb. Kérj ajánlatot!
- Tablet felvásárlás!! Apple iPad, iPad Mini, iPad Air, iPad Pro
- Dell Latitude 5530 Core i5 1245U, 16GB RAM, SSD, jó akku, számla, 6 hó gar
- Telefon felvásárlás!! Xiaomi Redmi Note 13, Xiaomi Redmi Note 13 Pro, Xiaomi Redmi Note 13 Pro+
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest




