Hirdetés
- IFA 2025: Ott üti az S25 Edge-et a Tecno Slim, ahol fáj neki
- IFA 2025: 300 wattos mobilakkut villantott a Sharge
- IFA 2025: Csúcskategóriás funkciókat kínál az EarFun új fül- és fejhallgatója
- Műholdas kapcsolatra is képes a Huawei MatePad Mini
- IFA 2025: NXTPaper kijelzős Ultra telefon és gyerekóra a TCL-nél
- IFA 2025: Ott üti az S25 Edge-et a Tecno Slim, ahol fáj neki
- Motorola Edge 40 - jó bőr
- Samsung Galaxy S23 Ultra - non plus ultra
- iPhone topik
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Okosóra és okoskiegészítő topik
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Üzemidőt áldoz a fényerő oltárán a Garmin Fenix 8 Pro
- Android alkalmazások - szoftver kibeszélő topik
-
Mobilarena
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
-
flash-
veterán
Sziasztok
Excel tablaban be vannak irva telefonszamok nevvel +36201234567 formatumban.
+36 20 123 45 67 formatumba szeretnem atallitani de nem engedi mert képletkent veszi akkor. Mi a megoldás? -
föccer
nagyúr
válasz
latya73 #54296 üzenetére
Keretezésree használj feltételes formázást. Sőt, igazándiból a cella színezésre is. Úgy nem gond neki, ha dinamikusan változnak alatta az adatok, mindig a megfelelő szabályrendszer alapján fogja a formázást beállítani.
Azt is meg lehet csinálni, hogy az üres sorokra ne rakjon keretet se, így ha az adat mennyiség változik, akkor is helyesen fog megjelenni.
üdv, föccer
-
latya73
csendes tag
Üdv!
Office 16 excelt nem tudom rávenni egy pofon egyszerű feladatra!
Formázott táblázatban sorba rendezés után a cellák színét viszi, de a cella keretet nem.
Tanácstalan vagyok. -
Szirtimorc
senior tag
Sziasztok!
Hogyan tudnám a függőleges Áramerősség (Tengelycím) feliratot átrakni balra?
Excel 2016
-
fila
senior tag
Sziasztok!
Ha egy cella tartalmának a 8. karakter utáni részét szeretném megkapni, hogyan tudom ezt megtenni? Milyen függvényt használjak?
Többféle hosszúságú a cella tartalom, de az első 7 karakterre nincs szükségem.Köszi!
-
Troy.
addikt
Sziasztok!
Miért van az hogy a szűrő bekapcsolásánál figyelmen kívül hagy egy sort?
Egész konkrétan az utolsó sort nem veszi bele a szűrésbe. Ilyet még nem láttam.
Próbáltam ki és bekapcsolni a szűrőt, Kijelöltem az egész adathalmazt hátha, de semmi. -
föccer
nagyúr
válasz
macilaci78 #54281 üzenetére
Google sheet-et nem ismerem ennyire. Az újabb office-ben elkészített számolótábla nem valószínű, hogy menni fog. Régebbi office-ben nincsenek benne azok a tömbfüggvények, amik erre alkalmasak. Nyilván végig lehetne makrózni az egészet, de az szívás.
Ha egy minimálisan is használod az excelt mondjuk az összeadáson kívűl, akkor érdemes upgradelni.
üdv, föccer
-
macilaci78
nagyúr
válasz
föccer #54280 üzenetére
Office 2016-om van, illetve vettem egy Office 2024-et is, de sikerült áttelepíteni a régi Win10-es gépről az új Win11-es gépre az Office 2016-ot, a 2024-es licenszet nem kellett felhasználnom.
Majd ha lesz időm ezzel foglalkozni, átküldöm.Viszont az újabb office-ban megcsinált dolgot lekezeli a régebbi? Esetleg google sheets?
-
föccer
nagyúr
válasz
macilaci78 #54279 üzenetére
Ez mind nem gond. Office2021-től ezek a natív tömbfüggvényekkel és az indirekt függvénnyel simán megoldhatóak.
Küld át azt, hogy pontosan miből, mit szeretnél látni, milyen szabályok szerint és összerakom, ha szeretnéd. Szoktam ilyesmiket megbízásból is csinálni, ez egy sima formanyomtatvány kezelés.
üdv, föccer
-
föccer
nagyúr
válasz
macilaci78 #54277 üzenetére
Miért nem hívsz fel, ha bajod van?
Csinálj egy nyomtatási képet tartalmazó munkalapot, meg egy számításokat, adatbeviteli mezőket tartalmazó munkalapot. Az utóbbin beviszed az adatokat, meg csinál mindent, a nyomtatási képen meg úgy rendezed el a dolgokat, ahogy akarod, és onnan nyomtatsz.
-
csferke
senior tag
válasz
macilaci78 #54274 üzenetére
-
ny.janos
tag
válasz
macilaci78 #54274 üzenetére
Szia!
Nézd meg ezt a leírást. -
macilaci78
nagyúr
Sziasztok!
Olyan kérdésem lenne, hogyan tudok "nyomtatóbarát formában" megjeleníteni egy keskeny táblázatot?
Például tankolást vezetem excelben: dátum, km-óra állása, a két tankolás közt megtett táv, tankolt liter, tankoláskori átlagfogyasztás. Ez egy A4-es lap felén elfér a nyomtatási nézetben.Azt szeretném, hogy a word-höz hasonlóan két hasábos legyen a nézet, tehát elkezdem a bal hasáb tetején, mennek a sorok, majd a jobb hasáb tetején folytatódik. Mindezt úgy, hogy a Szőrő eszköz működőképes maradjon.
Van erre valami csodaszer?
-
Fferi50
Topikgazda
válasz
Zola007 #54272 üzenetére
Szia!
Próbáld a következő szerint:
A feltételes formázáshoz kiválasztod a név mezőben a Táblázatod. Megadod hozzá a szabályt.
Amikor beszúrsz, akkor kiválasztod az adott sor első celláját, jobb egérgomb beszúrás - táblázatsorok felülre (gondolom nem probléma egy sorral lejjebb menni, ha alá szeretnél sort beszúrni).
Nekem ebben az esetben automatikusan bővítette a szabályokban az érvényességi tartományt és nem tett be új szabályt.
Üdv. -
Zola007
veterán
válasz
Delila_1 #54242 üzenetére
Szia
Átalakítottam táblázattá, átkerül a formázás, de amint beszúrok egy új sort, továbbra is bepakolja az új sorokat a feltételes formázások listájába.
mi lehet a gond?
pl. az egyik táblában A2 : K1000 táblára van beállítva egy formázás, de ha beszúrok egy sort akkor utána: -
Fferi50
Topikgazda
válasz
Geryson #54267 üzenetére
Szia!
Például feltételes formázás az adott oszlopra (vagy a mellette levőre). Szabály alkalmazásával, a szabály pedig, ha a C oszlopot figyelnéd, akkor:
=C1=C2
Kijelölsz hozzá és nem piros és nem zöld hátteret a cellához. Az érvényességi tartomány pedig az adott oszlop. Ha a C-t figyeled, de a D-be tennéd a megjelölést, akkor az érvényességi tartományként a D oszlopot add meg. A képlet marad ugyanaz!!!
Üdv. -
Telda
addikt
Sziasztok!
Darabjegyzéket vizsgálok, hogy minden festett alkatrész alatt van-e festék.
Jelenleg ezt úgy csinálom hogy leszűröm a festett cikkeket, azok pirosak (1) lesznek.
Majd leszűrőm a festékeket, azok pedig zöldek (2).
Ez után leszűröm a táblát hogy csak az 1 és 2 vel jelölt sorok látszódjanak és elkezdem görgetni lefelé és figyelem hogy minden piros alatt van-e zöld.
Ha két piros sor (vagy két 1-es) van egymás után az hiba.
Sajnos nem egyszer fordult már elő, hogy egyszerűen nem veszem észre.
Ebben kérnék segítséget vagy tanácsot.
Hogy ahol két 1-es követi egymást azt a cellát megjelölje. -
Silious
tag
Sziasztok!
Egy táblázatba szeretnék egy kis ellenőrzést végig vinni, ehhez lenne szükségem egy kis segítségre
Mellékelek egy mintát, Az E2 cellába szerepel egy képlet, amit szeretnék pár oszloppal arrébb, mondjuk a G2-be kiíratni, hogy pontosan milyen képlet szerepel az E2-be.
Erre van valami gyors mód? Lenne pár ezer sorom és látni szeretném, hogy a képletek jók-e...
-
Delila_1
veterán
válasz
Geryson #54257 üzenetére
[Itt levezeti] a Mutt által mutatott függvényt.
-
bozsozso
őstag
Sziasztok,
Van egy excel fájlom amit a saját gépemen beállítok nyomtatásra, fekvőbe minden frankón megjelenik rajta. Átküldöm egy másik gépre másik nyomtatóvan nyomtatva már állóban akarja kinyomtatni, de ha átállítom fekvőbe akkor sem úgyanúgy jelenik meg mint nálam. A másik gépen libreoffice-al nyitják meg a táblázatot(ha ez fontos). Tudok én a saját gépemen beállítani az excelben, hogy ugyanúgy lehessen nyomtatni mint nálam?
Vagy ez inkább nyomtató kérdés?
Előre is köszönöm a segítséget.
-
Mutt
senior tag
válasz
Geryson #54257 üzenetére
Szia,
MS365-ben van neked CSOPORTOSÍTÁS.ALAP.SZERINT (GROUPBY) függvényed is amit kipróbálhatsz.
T1-ben a képletnek próbáld ki ezt:
=CSOPORTOSÍTÁS.ALAP.SZERINT(F:F;K:K;SZUM;3)
üdv
-
Geryson
addikt
Ha van egy lapom, amin az egyik oszlop értékeit szeretném összeadni, de megtartva a szeparációt a különféle termékek között (itt az "F"-oszlop), akkor mi ennek az elegáns módja? Ráhúztam egy pivotot, ez működik is, de emlékszem még valami másra is, ahol szépen összeadogatja az egyforma termékeket egy összesítő sorban.
-
Mutt
senior tag
-
-=MrLF=-
senior tag
Sziasztok!
Belefutottam egy olyan excelbe amiben ha kilóg az első sor, az oszlop azonosítók helyére (A B C D), bekerül az első sor szövege (ha egy bizonyos tartományon belül maradok)
Fájlok: [link] (97-2003 xls-be mentve is működik)
Próbálom ezt egy tök új fájlban összehozni, de nem sikerül és idegesít
, hogy nem jövök rá. Pedig jó lenne, mert tetszik hogy felső sor rögzítés nélkül is látszik mi micsoda.
Tudja valaki, mit, hogy nyomjak hogy ezt elérjem?
Köszi
(Nálam 2007 magyar Office van.) -
Pá
addikt
válasz
Geryson #54250 üzenetére
Irányítószám egyszerű, feltételezve, hogy A1 cellában van a szöveg, amiből ki akarod nyerni
Ez mindig a szöveg első 4 karakterét adja vissza=LEFT(A1,4)
A helységnévre most hirtelen két módszert látok, de talán lehetne ennél elegánsabban is?
Itt a 6. karaktertől az első vesszőig adja vissza az értéket:
=MID(A1, 6, FIND(",", A1)-6)
Itt pedig az első space és az első vessző közti értéket adja vissza
=MID(A1, FIND(" ", A1) + 1, FIND(",", A1) - FIND(" ", A1) - 1)
Ezek a függvények az angol excelben működnek.
Ha magyar exceled van, akkor
LEFT helyett használd, hogy BAL
MID helyett, hogy KÖZÉP
FIND helyett, hogy SZÖVEG.TALÁL -
Geryson
addikt
Sziasztok! Adott egy cella, ezzel a tartalommal:
1012 Budapest, Balogh Ádám út 35.
Segítene nekem valaki azzal, hogy:
- Kiszedi csak az irányítószámot?
- Kiszedi csak a helységnevet?Köszönöm előre is!
-
sajog159
aktív tag
Ha egy nagyobb cellában szeretnék sortördelést (mondjuk a számokat új sorban kezgjen). Hogy is kell?
-
Héraklész
aktív tag
válasz
Delila_1 #54244 üzenetére
Köszönöm!
Szóval a 2. kérdésem arra utal, hogy van-e olyan lehetőség, amivel összepárosítok termékneveket cikkszámokkal úgy, hogy később manipulálom (rendezgetem) a táblázatot, de a párok örökérvényűen együtt maradjanak, nehogy elcsússzanak óvatlan szerkesztéstől, amit csak később vennék észre? -
Delila_1
veterán
válasz
Héraklész #54243 üzenetére
Állj a cellára, ami fölött, és tőle balra állandóan látni akarod az oszlopokat, ill. sorokat, majd a panelek rögzítése funkciót kapcsold be. Nem tudom, hol találod ezt a LibreOffice-ban, de biztosan megtalálod.
Ha a 3 első oszlopot akarod rögzíteni, és egyúttal a címsort is, akkor a D2-be állva végezd el.
A 2. kérdést nem értem. -
Héraklész
aktív tag
Hogyan lehet azt megcsinálni, hogy a táblázatban mondjuk csak 3 oszlop legyen, a többit ne lehessen görgetni/látni?
Illetve hogy egy terméknévhez egy cikkszám tartozik, a mellette lévő oszlopban/cellában, de bármi is történjen, ezek össze vannak kapcsolva, semmiképpen nem csúszhat el a cikkszám a nevekhez képest?(Igaz, a LibreOffice-ban jobban érdekelne, de ebből ki tudok indulni majd angolul, köszönöm.)
-
Zola007
veterán
Valakinek ötlete van miként lehetne egy feltételes formázást fixálni mint a függvényeknél egy tartományra (pl. A-H oszlopk) hogy dinamikusan bővüljön/szűküljön attól függően hogy illesztek vagy törlök belőle új sorokat.
Mert ez így hogy újabb kondíciós sorokat pakol be a formázás menübe kész agyf*sz -
föccer
nagyúr
Igazándiból haladjunk a korral jeligére tegnap-tegnapelőtt regisztráltam rá, hamár a csapból is ez folyik. Egy már régebben megoldott feladatomnak egy kis részét írtam le neki próbából. A legelkeserítőbb az volt, hogy a legenerált xlsm fájlja nem volt megnyitható és néhány a végén még mindig maradt benne egy olyan hiba, hogy nem azt adta eredményül, amit kellett volna. Szóval kb ugyan arra a következtetésre jutottam, mint te. Az biztos, hogy a mélyszakmai elemzéseket nem fogom rá bízni.
A mostani feladatot kb sorrol sorra megfoglamaztam neki, a teljes szemantikát leírtam, lépésről lépésre. És így sem jött neki össze elsőre. De mókának jó volt, illetve a lehetőséget felmérni.
-
Pá
addikt
válasz
föccer #54237 üzenetére
Mostanában sokat dolgozom vele, tényleg sokat segít, de érteni is kell hozzá valamennyire.
Standard dolgokat szinte hibátlanul megoldja, de gyakran túlbonyolítva és nem optimalizálva. Pl ha bármit akarok keresni vagy elemeket megszámolni, akkor majdnem mindig végigiterál az egész range-n, ahelyett, hogy find vagy match-et használna, vagy countA vagy ilyesmit. Feleslegesen telepakol változóval mindent és ír 3 sort egymás alá, ahol egyik változóból kifejezi a másodikat, abból a harmadikat. Ezeket simán össze lehet vonni egy sorba meg ilyenek. Szóval végül is működik a kód, csak nem túl elegáns meg kicsit erőforrás pazarló.
De ezzel együtt lehet élni.Ha viszont valami kacifántosabb vagy nagyon nem standard dolgot kérsz tőle, akkor hajlamos nagyon belezavarodni, elkezd haluzni és szar megoldásokkal traktálni, amik nem működnek és ilyenkor nagyon könnyen bele lehet csavarodni és a végén elmegy 2 óra azzal, hogy vitatkozom vele és a szar megoldásait próbálom működésbe hozni.
Ez olyankor idegesítő, amikor amúgy a kódot megírhattam volna magamnak fél-1 óra alatt, csak gondoltam előtte gyorsan megkérdem, hátha összejön 10 perc alatt és a végén ott vitatkozom vele két órával később is. -
Mutt
senior tag
válasz
föccer #54237 üzenetére
Szia,
Nem kell két dictionary, hogy tudd melyik receptből mennyi van. A kulcs (key), mellett van az item tulajdonság is. A receptDict teljesen felesleges.
' Receptszámok összegyűjtése és számlálása
Set receptCount = CreateObject("Scripting.Dictionary")
osszesMinta = 0
For i = 2 To lastRow
If alapadatok.Cells(i, 1).Value = valasztottUzem Then
receptSzam = alapadatok.Cells(i, 2).Value
osszesMinta = osszesMinta + 1
If Not receptCount.Exists(receptSzam) Then
receptCount.Add receptSzam, 1
Else
receptCount(receptSzam) = receptCount(receptSzam) + 1
End If
End If
Next i
üdv -
föccer
nagyúr
Hogy ne legyen itt Wall of text
Itt tart a ChatGPT. Kis javítást kellett bele pakolnom, meg egy user formot rendbe raknom és igazitanom az elenvezéseket. Kemény cucc.
-
Mutt
senior tag
Sziasztok,
A Microsoft 1 évvel ezelőtt egy új függvényt mutatott be, amellyel kimutatást (pivot) lehet készíteni. Magyarul KIMUTATÁS.ALAP.SZERINT (angolul PIVOTBY) a függvény neve.
Nálam a kimutatás gyakran van használva (pár éve áttértem Power Pivot-ra a normál helyett), de eddig még nem próbáltam ki az új függvényt.
Tegnap egy kicsit játszottam vele és ezen tapasztalatot akarom megosztani veletek egy 130 ezer és 77 oszlopot tartalmazó adatosoron, ez kicsivel több min 10 millió cella, ez egy 37 MB-os XLSX fájlban van (aki teheti az sok adat esetén használjon inkább XLSB formátumot, mert ugyanez csak 10 MB, hátránya max annyi hogy lehet hogy más programok/rendszerek nem támogatják ezt a formátumot, illetve ha megsérül a fájl, akkor nagyobb az esély adatvesztésre).
Az új függvény (továbbiakban PIVOTBY) előnyei:
1) automatikusan frissül az eredmény ha az adatsoron változás van,
Itt nem vettem észre lassulást, gyorsan megkapjuk az eredményt (5 éves laptop 16 GB ram és i7-9850H CPU, Windows és Office is 64 bites).
2) Több összesítő (aggregátor) függvénye van mint egy standard Pivotnak, vannak olyanok amiket csak Power Pivot-tal lehetett eddig elérni (pl. szöveg összefűzés) és LAMBDA függvényt is tudunk írni.
3) nincs pivot cache (kimutatás forrásadatok/gyorsítótár) ami növeli a fájl méretét.
A 37 MB-os fájl normál Pivottal 46 MB lett, Power Pivottal 47 MB, mig PIVOTBY-al maradt 37 MB.Szerintem ezzel végére is értem az előnyöknek, a hátrány viszont bőven van.
1) A függvénynek 11 paramétere van, ebből 4 kötelező, de a valóságban kb. még 3-at (összegek/részösszegek mutatása, sorbarendezés, szűrő) célszerű használni.
Egy alap pivot is túl bonyolult (a sortörésekkel próbáltam az olvashatóságot segíteni).
2) Őrült képletek kellenek egyes esetekben , amiket a pivotban simán el tudtunk érni.
pl. nem csak összeget, hanem átlagot is akarunk számolni ugyanarra a mezőre.
3) Nincs formázás, így nekünk kell mindent csinálni. Ami azért kihívás, mert ez egy spill/terülő képlet, mindig annyi sort/oszlopot fog elfoglalni amire szükség van. Ha azt akarjuk hogy a totál sor/oszlop értékek máshogy nézzenek ki, akkor feltételes formázásokat kell használnunk. Ez sok idő tud lenni.4) Szűrő/szeletelő használata sem olyan egyszerű. (A mintában a BYROW sor a G1 cellában lévő év szerinti szűrést végzi el.)
Egy kis összegzés:
Egyszerűbb dolgokra lehet használni a PIVOTBY-t, de jelenlegi formájában még távol van egy normál PIVOT-tól. Vállalati környezetben én még kerülném/kerülöm.üdv
-
Derron
aktív tag
válasz
Delila_1 #54229 üzenetére
Zargatnálak még egy kicsit, ha szabad.
Jól működik ez a megoldás, viszont felmerült, hogy mi történik ha félre olvassák a vonalkódot. Szóval nem a megfelelő sort (Adatot sikerül beolvasni róla) hanem egy másik értéket, pl "V0". Van olyan megoldás, hogy ebben az esetben ne lépjen tovább, vagy vissza ugorjon arra a cellára ahova ez lett beolvasva? -
Mutt
senior tag
válasz
Pakliman #54199 üzenetére
Szia,
Két megoldást tudok javasolni:
1. A Click eseményeket beteszed egy saját subroutinba és azonnal meghívod ahogy a vezérlőt (választó gombot) létrehoztad.Sub RunClick(obj As Object)
Dim frm As MSForms.UserForm
Set frm = obj.Parent
With frm
Select Case obj.Name
Case "opbXYZ1"
.Label1.Caption = obj.Name & ": " & obj.Value
Case "opbXYZ2"
frm.BackColor = 13882323
MsgBox "hello world"
Case "opbXYZ3"
frm.BackColor = 14481663
End Select
End With
End Sub
A Select Case-el csak bemutattam hogy eltérő ágakat tudsz létrehozni.2. Megvárod, hogy a vezérlő létrejöjjön és csak utánna változtatod meg az értékét.
A kódodon csak minimálisan változtattam (tartalmazza az 1-es lehetőséget is), a végén van a 2-es opció. Ott véletlenszerűen megváltoztatom az egyik vezérlő értékét, ekkor már le fog futni a Change esemény-Private Sub CommandButton1_Click()
Dim ctl_OpB As MSForms.OptionButton
Dim i As Long
ReDim opbArray(1 To 3)
For i = 1 To 3
Set ctl_OpB = Me.Controls.Add("Forms.OptionButton.1", "opbXYZ" & i, False)
With ctl_OpB
.Left = 100
.Top = 150 + (i * 20)
.Width = 100
.Caption = "opb_" & CStr(i)
.Visible = True
End With
'egyik megoldás, hogy létrehozáskor elindítod a saját kódod
Call RunClick(ctl_OpB)
Set opbArray(i).OptionButton = ctl_OpB
Next i
Set ctl_OpB = Nothing
'másik megoldás, hogy létrehozás után változtatod meg az értékét
Dim r As Double
Randomize
r = Int(Rnd * 3) + 1
opbArray(r).OptionButton.Value = Not opbArray(r).OptionButton.Value
End Sub
A class module-ban csak ennyi van:
Public WithEvents OptionButton As MSForms.OptionButton
Private Sub OptionButton_Change()
Dim frm As MSForms.UserForm
Set frm = OptionButton.Parent
With frm
.Label1.Caption = .Label1.Caption & vbNewLine & OptionButton.Name & " - " & OptionButton.Value
End With
End Sub
Próbáld ki.
üdv
-
Mutt
senior tag
válasz
Fferi50 #54172 üzenetére
Sziasztok,
Én nem szoktam használni, de lehet tartományokat jelszavaztatni.
Mark ebben a videóban bemutatja, kb. 2:40-től kezdődik. Ezzel lehet eltérő "jogosultságokat" létrehozni. A videó végén azért elhangzik, hogy az Excel jelszavas védelmére építkezni nem szabad.üdv
-
Mutt
senior tag
Szia,
Szerintem itt fontos tisztázni azt, hogy amit a Personal.xlsb "Workbook_Open" eseményébe teszel, akkor az csak egyszer fog lefutni, amikor az Excel indulásakor az egyéni makrófüzet a háttérben megnyílik.
Azt akarod, hogy minden Excel fájl megnyitásakor legyen vmi ellenőrzés és azt ahogy tetted egy Class Module-al lehet megtenni.
Próbáld ki:
1. Personal.xlsb-ben legyen egy class module, a neve fontos clsApp legyen (ha más akkor a másik modulban kell módosítani). A tartalma pedig ez:Public WithEvents AppEvents As Application
Private Sub AppEvents_WorkbookOpen(ByVal wb As Excel.Workbook)
Call OpenEvent(wb)
End Sub
Private Sub AppEvents_WorkbookBeforeClose(ByVal wb As Workbook, Cancel As Boolean)
Call BeforeClose(wb, Cancel)
End Sub
Ahogy látható két workbook eventhez (open és a beforeclose) rendeljük a saját kódunkat.
2. A Personal.xlsb-ben legyen egy normál modul amibe az alábbi kódok kellenek:
Dim AppObject As New clsApp
Sub Init()
'ezt az egyéni makrófüzet Open eseményében fogjuk meghívni
Set AppObject.AppEvents = Application
End Sub
Sub OpenEvent(wb As Workbook)
'ez az egyéni Workbook_Open eseményünk ahova tesszük a saját kódot
'a megnyitott fájl ellenőrzése (a példában ha M-el kezdődik a neve)
If wb.Name Like "M*" Then
'hozzáadjuk a kedvenc makrónkat az eszköztárhoz
Call AddNewMenuItem
End If
End Sub
3. A Personal.xlsb ThisWorkbook eseményeibe pedig tegyük ezt be:
Private Sub Workbook_Open()
Call Init
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call DeleteControls(True)
End Sub
Vagyis amikor elindítjuk az Excel-t, akkor az "Init" kódban megadott sor lefut, ami annyit tesz, hogy egy objektumot hoz létre ami tartalmazza az Excelben megnyitott fájlokat.
A másik pedig ha bezártuk az Excel-t teljesen, akkor előtte töröljük a saját menűt.4. Az egyéni parancs eszköztárra (QAT) kihelyezése.
Gyorselérési eszköztárra nem raktam még kóddal ki gombot, de a https://jkp-ads.com/rdb/win/s2/win004.htm oldalon találtam egy hasznos add-int, aminek a kódja szerint ez könnyen megy, de nekem nem jött össze. Az addin ettől még szuper, ha van sok saját makród, akkor ezzel tudod rendszerezni és elérni QAT-ról.Ami ment az egy új menű az eszköztáron. Én régen ezt használtam, MS365-ben most is megy.
Szóval van a normál modulban még 2 program, ami felteszi illetve leveszi a saját makródat.
Ami felteszi az így néz ki:
Private Sub AddNewMenuItem()
'töröljük az esetleg létező saját menűt
DeleteControls
Dim CmdBar As CommandBar
Dim CmdBarMenuItem As CommandBarControl
Set CmdBar = Application.CommandBars("Worksheet Menu Bar")
'Add a new menu item
Set CmdBarMenuItem = CmdBar.Controls(CmdBar.Controls.Count - 1).Controls.Add
'Set the properties for the new control
With CmdBarMenuItem
.Caption = "Saját Makró1"
.OnAction = "'" & ThisWorkbook.Name & "'!Kedvencem"
.Tag = C_TAG
End With
End Sub
Ehhez van egy C_TAG állandó a modul elején definiálva:
Private Const C_TAG = "Makrocska" 'C_TAG legyen egyedi név
Illetve fent a kódban az OnAction végén van a makró neve (esetemben "Kedvencem"),
ami ennyit tartalmaz csak:Sub Kedvencem()
MsgBox "Palacsinta", vbOKOnly
End Sub
Ami leveszi az pedig ez:
Sub DeleteControls(Optional tuti As Boolean = False)
Dim Ctrl As CommandBarControl
On Error Resume Next
Set Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)
Do Until Ctrl Is Nothing
Ctrl.Delete
Set Ctrl = Application.CommandBars.FindControl(Tag:=C_TAG)
Loop
End Sub
A fenti kódokkal el tudtam érni, amit szerettél volna:
1. Akár jelszavas fájlok esetén is (csak a megfelelő jelszó ismeretében) fut le az open esemény...
2. ami a kritériumoknak megfelelően (a példámban csak az nézem hogy a fájl neve M-el kezdődik-e vagy sem) kirak egy makrót az eszköztárra...
3. az Excel bezárásakor pedig leveszi a dolgokat.Próbáld ki, ha még kell.
A kódok alapja a Walkenbach VBA könyve (17-es fejezet). Régi (az újabbak sem hinném hogy rosszabbak), de még mindig nagyon jó. Én csak ajánlani tudom angolul tudóknak.Két fontos dolog:
1) Saját makrók esetén fontos tudni jól használni a Thisworkbook és Activeworkbook-ot.
2) Én inkább fixen kiraknám a makrót a QAT-ra és a makrót készíteném fel arra, hogy ha a fájl nem felel meg a feltételeknek akkor ne csináljon vele semmit.üdv
-
Delila_1
veterán
válasz
Derron #54216 üzenetére
Tábázatként formázd az A: C tartományt. A C2 képlete:
=HA(BAL(A2;5)=BAL(B2;5);"OK";"NOK")
A Beállítások/Szerkesztés/Az Enter lenyomására a fókusz áthelyezése menüpontban válaszd a Jobbra opciót.
Az A és B oszlopban szüntesd meg a zárolást (Cellaformázás, Védelem lap), a Zárolt cellák kijelölése elől vedd ki a pipát.
Védd le a lapot (jelszóval vagy anélkül).
Minden bepittyegés után A-ból B-be, majd a következő A-ra áll a fókusz. -
Fferi50
Topikgazda
válasz
Derron #54216 üzenetére
Szia!
Milyen módon olvasod be a vonalkódot és a QR kódot (milyen szoftverrel), hogyan kerül be a cellákba az értékük?
Eseménykezelő makróval lehet figyelni a cellák tartalmának változását.
Ha táblázattá alakítod, akkor a C oszlop képletezése automatikusan megy tovább, amikor beírsz egy új értéket az A-B oszlopba. (Ezt a beállításoknál tudod elérni.)
Az alábbi makró figyeli az A és B oszlop változását: A oszlop esetén továbblép a B oszlopra, B oszlop esetén továbblép az A oszlop következő cellájára.
A makrót a munkalap kódlapjára kell bemásolni:Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then Target.Offset(0, 1).Select
If Target.Column = 2 Then
If Target.Offset(0, -1) <> "" Then
Application.EnableEvents = False
Target.Offset(1, -1).Select
Application.EnableEvents = True
End If
End If
End Sub
Így nézne ki a táblázat:
Viszont fontos tudni, hogyan kerül az A B oszlopba a beolvasott érték.
Üdv. -
Derron
aktív tag
Sziasztok,
Erre a feladatra van esetleg megoldás?
Egy vonalkód tartalmát és egy QR kód bizonyos részeinek egyezőségét szeretném ellenőrizni.
PL:
Vonalkód: 12345
QR kód: 12345afghkasd
Ha a vonalkód tartalma megegyezik a QR kódból vett első 5 karakterrel akkor OK, ha nem akkor NOK.Ezzel eddig nem is lenne probléma, viszont folyamatosan szeretném ezeket vonalkód/QR kód olvasóval olvastatni kattintások nélkül, viszont az excel folyamatosan lefele léptet.
Az elképzelés:
A2 be beolvasom a vonalkódot, majd B2-be a QR kódot, ha a fenti teljesül, akkor C2 OK
Ha nem, akkor C2 NOK, és ugrik tovább az A3-ba ahova ismét vonalkódot olvasunk, B3-ba QR és így tovább.Ha ez így nem működőképes, az is jó, ha egy adott fix mezőbe kell olvasni mindent, csak a lényeg, hogy ne kelljen egeret billentyűzetet használni, csak a scannerrel olvasni az adatokat.
Tudtok ebben segíteni?
-
Pá
addikt
válasz
Fferi50 #54214 üzenetére
Köszi, ezen átsiklottam, mert nem értek hozzá és emiatt elsőre macerásnak tűnt.
Az a baj, hogy ez a mostani projectemnek ez csak egy kicsi és viszonylag jelentéktelen része, szóval nem éri meg az extra időráfordítást, hatékonyabb egy gyors, ismert megoldás.De hosszú távon hasznos lehet, szóval megpróbálom észben tartani és egy nyugisabb időszakban kicsit utánaolvasni, mert sok lehetőséget megnyithatna, ha része lenne ilyesmi is az eszköztáramnak.
-
Pá
addikt
válasz
Fferi50 #54206 üzenetére
Köszi! Hétvégén nem foglalkoztam a témával, majd holnap újra előveszem.
De ha csak így lehet megoldani, akkor inkább nem eröltetem a validálást, mert akár 100 sornyi is lehet, az meg már 200 textbox.Valszeg akkor az marad, hogy ha rányomnak a userform OK-ra, akkor kiírom egy lapra az értékeket és azt validálom egyben, majd újra feldobálom a userformot, amíg van benne fals adat.
User ebből annyi érzékel, hogy rányom az OK gombra, de nem történik semmi.Esetleg messageboxban ki tudom jelezni neki ilyenkor, hogy melyik sorokkal van probléma.
-
russel87
csendes tag
Sziasztok!
Kép beszúrással lenne problémám!
A cellába beszúrom a képet (beszúrás, képek, cellába helyezés), majd elmentem és bezárom. Újra megnyitom és a cellában már#ISMERETLEN!
hiba van!
Office LTSC Professional Plus 2024 (magyar) -
Fferi50
Topikgazda
válasz
Pakliman #54208 üzenetére
Szia!
"Esetleg lehetne úgy is, hogy dinamikusan létrehozom a vezérlőt és vele együtt VBE-be a megfelelő kódo(ka)t..."
Valóban ez lehet egy megoldás az "osztályosdi" elkerülésére, a UserForm kódlapjára beírni a létrehozott új vezérlőkhöz kapcsolódó kódokat. Erre megvannak az eszközök (VbProject, VbComponents(x), CodeModule eszközei)
Más kérdés, hogy enged-e kódot írni makróból, futás közben - nem veszi-e víruskísérletnek? Ezt ki kell próbálni.
Üdv. -
Pakliman
tag
válasz
Fferi50 #54207 üzenetére
Legalább 25 éve foglalkozom az Excel-el és nagyon sok (több százezer) sort írtam már meg, de az "osztályosdit" mindig kerültem. Most úgy gondoltam, hogy talán hasznomra válhat, mert eddig úgy csináltam, ahogy írtad is:
esetleg megoldható lenne az esetek számának megfelelő vezérlő létrehozása
.
Ha nem tudok kódból triggerelni egy eseményt, akkor maradok a régi bevált módszernél.Esetleg lehetne úgy is, hogy dinamikusan létrehozom a vezérlőt és vele együtt VBE-be a megfelelő kódo(ka)t...
Vagy még előtte teszek egy (két, há sok...) próbát a .Value (vagyis a .Change esemény) változtatásával -
Fferi50
Topikgazda
válasz
Pakliman #54205 üzenetére
Szia!
Még mindig nem egészen értem. Nem azért teszed ki a választógombot, hogy a user válassza ki a megfelelő opciót?
Azt, hogy a listát megváltoztató parancsgombra ne tudjon kattintani, elérhető azzal, ha az arra vonatkozó Click esemény végén inaktíválod a gombot.
A választógombok eseménykezelését pedig a saját osztályában tudod megoldani.
Én úgy látom eddig, hogy a dinamikusan létrehozott vezérlők eseménykezelőit nem lehet beindítani makróból, viszont az eseménykezelőket megírhatod az osztályhoz tetszésed szerint.
Ahogy Pá fórumtársnak írtam, esetleg megoldható lenne az esetek számának megfelelő vezérlő létrehozása előre és a helyzetnek megfelelő kezelése.
Üdv. -
Fferi50
Topikgazda
Szia!
Épp Pakliman fórumtárs is hasonló problémát vetett fel, dinamikusan létrehozott vezérlőkhöz külön osztállyal lehet eseményeket rendelni. Ez viszont úgy látom, makróból nem indíthatóak valami miatt. (Nem volt időm még, hogy teljesen utánajárjak a természetének.)
Viszont, amennyiben meghatározható, hány darab textboxod lehet maximálisan, akkor megoldható úgy, hogy a userformon létrehozod az ennek megfelelő számú textboxot, majd csak annyit teszel láthatóvá, ahányra szükséged van. Makróból a userform mérete és a vezérlők elhelyezkedése és láthatósága szabályozható.
A validáláshoz létrehozott szabályokat egy "külön" eljárásba teszed és minden textbox BeforeUpdate eseményét ide irányítod. A validáló makrót pedig csináld paraméteresen, amit úgy hívsz meg, hogy átadod az adott textbox nevét: pl. validal activecontrol.name.
Üdv. -
Pakliman
tag
válasz
Fferi50 #54202 üzenetére
Szia!
A júzer kattintgat ide-oda-amoda, ezek alapján megváltozik (vagy nem!) az opb lista. Az éppen aktuális állapotnak megfelelően az opb listában automatikusan ki kellene választódnia a "legrelevánsabb" opciónak (itt kellene kódból meghívnom a Click eseményt!), amit viszont a júzer bármikor felülírhat. A kiválasztás hatására más dolgok megint csak változnak, amiket a Click-re programoznék.
-
Pá
addikt
Van egy userformom, amin az első sorban van sokféle vezérlő, ezek közül 2 textbox, most csak ezek az érdekesek.
BeforeUpdate eventre beprogramoztam néhány validálási szabályt, hogy a userek ne írjanak be minden hülyeséget. Eddig minden jó.Viszont ez egy dinamikus userform, szóval úgy működik, hogy az első sor vezérlőit a megfelelő számban sokszorosítja. Szóval ha pl a munkafüzetben 18 elem van, akkor a userformomon is 18 sornyi vezérlőm lesz, így már összesen 36 textbox-szal.
Arra nincs ötletem, hogy alkalmazzam a validálási szabályokat a dinamikusan létrehozott textboxokra? Ugye a BeforeUpdate csak az első, eredeti sort fogja figyelni. A többiben szabadon garázdálkodhatnak a userek.
szerk: gondolom ezt a beforeupdate eventtel nem lehet megoldani, szóval valami más approach kell.
Legrosszabb esetben kiírhatom egy lapra az értékeket, ha a user rányom az OK-ra és azon a lapon validálom az értékeket és újra feldobálom nekik a userformot, addig, amíg sikerül normálisan kitölteni. De ez csak olyan végső, favágó megoldás, jó lenne valami elegánsabb, ami nem is engedi a user-t leokézni a formot, amíg nem jó.Ki lehet valahogy írni egy globális változóba esetleg, amit bevisznek értékeket és azt validálni valahogy? Csak az a baj, hogy ezek mind valami eventtel működnének, de nem tudok eventet rendelni a dinamikusan létrehozott vezérlőkhöz.
-
Fferi50
Topikgazda
válasz
Pakliman #54199 üzenetére
Szia!
Nem egészen értem, hogy miért szeretnél makróval eseményt indítani egy újonnan felvett vezérlőre. Ezeket pont a userrel való kommunikációra használjuk. Pláne úgy, hogy egy aktív userformon van. Ha végig fut a makró, a userform fennmarad, akkor kattintgathat a user, vezérelheti a folyamatokat.
Persze értem én, hogy tanulni szeretnél, csak nem logikus szerintem.
Üdv.
Új hozzászólás Aktív témák
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Assassin's Creed Shadows Collector's Edition PC
- Game Pass Ultimate előfizetések 4 - 19 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Okosóra felvásárlás!! Samsung Galaxy Watch 5 Pro, Samsung Galaxy Watch 6 Classic
- ÁRGARANCIA!Épített KomPhone i5 14400F 32/64GB DDR5 RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone 15 Pro 256GB Natural Titanium -1 ÉV GARANCIA - Kártyafüggetlen, MS3282
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Samsung Galaxy A55 5G / 8RAM 256GB / Gyárifüggetlen / 12 Hó Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest