- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Az NVIDIA ipari AI-felhőt épít a németeknek, együtt az OpenAI és a Google
- Két új Ryzen közül választhatnak a kézikonzolok
-
PROHARDVER!
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
-
morgusz
csendes tag
Sziasztok!
Egy fájlban,több munkalapról, naponta változó számú sort kellene egy összesítő lapra, egymás alá másolni, valami makróval. Makró rögzítéssel csinálnám, de a változó sorszám miatt kellene még valami, hogy ne kelljen akkora területek másolását beállítani, amibe biztosan be fognak férni a várható változó nagyságú másolandók. Aztán még törölni is kell az üreseket.
Valahol láttam már ilyet de most nem találom.
Tudnátok segíteni?Előre is köszi!
-
Retekegér
MODERÁTOR
Hali!
Azt hogy tudom megcsinálni, hogy egy oszlopdiagram második oszlopa az első oszlop tetejénél kezdődjön? (Office 2007)
-
bteebi
veterán
válasz
tgumis #23494 üzenetére
Át kell írnod a file elérési útvonalát. Ctrl+H → Egyebek → Hatókör: Munkafüzet (esetleg a "Listába mind" is legyen bepipálva, és akkor láthatod, hogy hol vannak ilyen hivatkozások), és a megfelelő részt (a file elérési útvonalát) kicseréled. Keress szögletes zárójelre vagy \-re, az biztosan lesz benne.
-
Attas
aktív tag
Sziasztok!
Van rá mód, hogy egy olvasásra megnyitott dokumentum, bezárás és újra megnyitás nélkül, bizonyos időközönként automatikusan frissüljön?
Köszönet előre is a válaszokért.
-
tgumis
tag
Sziasztok!
Problèma a következő:
Van egy munkafüzet amibe màs munkafüzetekből hivatkozzunk az adatokat.
Ha átrakom pendrivròl gépre a tovàbra is a pendriveròl hivatkozik hogy tudom megoldani,hogy onnan hivatkozzon -
szőröscica
addikt
Sziasztok!
Excelben szeretnék egy névsort véletlenszerűen csoportokba sorolni. Függvényt nem lehet használni, és nem húzható kézzel az egyes csoportok alá a név.
van valami rendezési lehetőség erre?
Van 44 név, 6-7 fős csoportba kell tenni őket véletlenszerűen, fv hasznalata nélkül.
-
bteebi
veterán
válasz
m.zmrzlina #23488 üzenetére
Köszönöm mindkettőtöknek!
#23491: Van benne valami.
-
Delila_1
veterán
válasz
m.zmrzlina #23490 üzenetére
Ezért alkalmazok szívesebben a tartalmukra utaló nevű változókat, mint pl. sor, és oszlop.
-
Delila_1
veterán
válasz
m.zmrzlina #23488 üzenetére
Jobban látszik a haladás sorrendje, ha a Cells(i, j).Select sor helyett
MsgBox Cells(i, j).Address szerepel a makrókban. -
m.zmrzlina
senior tag
válasz
bteebi #23487 üzenetére
Négy irány:
Sub fornext_bjfl() 'balról jobbra fentről le
For i = 1 To 10
For j = 1 To 5
Cells(i, j).Select
Next
Next
End Sub
Sub fornext_jblf() 'jobbról balra lentről fel
For i = 10 To 1 Step -1
For j = 5 To 1 Step -1
Cells(i, j).Select
Next
Next
End Sub
Sub fornext_jbfl_() 'jobbról balra fentről le
For i = 1 To 10
For j = 5 To 1 Step -1
Cells(i, j).Select
Next
Next
End Sub
Sub fornext_bjlf() 'balról jobbra lentről fel
For i = 10 To 1 Step -1
For j = 1 To 5
Cells(i, j).Select
Next
Next
End SubRemélem nem írtam el.
-
bteebi
veterán
válasz
m.zmrzlina #23486 üzenetére
Akkor nem véletlenül nem találtam
. Köszönöm, ki fogom próbálni.
-
bteebi
veterán
Sziasztok! Azt meg lehet adni, hogy a "For Each" egy tartományban soronként vagy oszloponként haladva fusson le?
-
morgusz
csendes tag
Sziasztok!
Régóta nem jövök rá, hogy miért van az, hogy ha egy xls. fájlt csv.-ként (pontosvesszővel tagolt) mentek kézzel, akkor az (jegyzettőmbbel megnyitva) " ;"-vel tagolt lesz, ha makróval csinálom úgy csak ","-vel tagolt. Így viszont egy másik program nem eszi.
Min csúszik el dolog? Kérem segítsetek, mert egyre több a kézimunka!Köszi!
-
-PLevi-
senior tag
válasz
m.zmrzlina #23480 üzenetére
Köszönöm szépen, ki lesz próbálva!
-
m.zmrzlina
senior tag
válasz
-PLevi- #23477 üzenetére
Egy kicsit kecsesebb ez a megoldás de a lényeg ugyanaz mint az előbbinél.
Sub atszamoz()
holavege = Range("A" & Rows.Count).End(xlUp).Row
Cells(1, 1).Select
i = 1
Do While Not ActiveCell.Row > holavege
If ActiveCell.EntireRow.Hidden = False Then
ActiveCell.Value = i
i = i + 1
Else
ActiveCell = Empty
End If
ActiveCell.Offset(1, 0).Select
Loop
End SubEz nem kíván folyamatos tartományt az A oszlopban és nem ír semmit a rejtett sorokba.
-
m.zmrzlina
senior tag
válasz
-PLevi- #23477 üzenetére
Azt nem tudom, hogy makró nélkül megoldható-e de itt egy példa egy makrós megoldásra:
Sub atszamoz()
Cells(1, 1).Select
i = 1
Do While ActiveCell.Value <> ""
If ActiveCell.EntireRow.Hidden = False Then
ActiveCell.Value = i
i = i + 1
Else
ActiveCell.Value = 0
End If
ActiveCell.Offset(1, 0).Select
Loop
End SubA tartomány kijelölése másképp is megoldható mint itt. A lényeg: végigmész az egész tartományon leellenőrzöd, hogy rejtett-e az aktuális sor és ha nem rejtett adsz neki egy sorszámot. Ezt a makrót minden új szűrés után le kell futtatni.
-
-PLevi-
senior tag
Sziasztok!
Szerintetek ezt hogy lehetne megoldani?
Adott egy munkalap pár tucat sorral amiben különböző adatok vannak. Az "A" oszlopban sorszámok találhatóak. Hogy lehet úgy elrejteni tetszőleges számú sort, hogy a sorszámozás ne szakadjon meg? Értem ezalatt: Csak a látható sorok legyenek sorszámozva, az elrejtettek ne. Ráadásul ennek dinamikusan kellene működnie.Például:
1. aaa
2. bbb
3. ccc
4. ddd
5. eeeElrejtem a 2. és 3. sort. Ez esetben a sorszámozás így néz ki:
1. aaa
4. ddd
5. eeeDe én azt szeretném így nézzen ki:
1. aaa
2. ddd
3. eeeMajd miután visszaállítom az elrejtett sorokat ismét a kiindulási állapotnak kellene fogadni. Ha legközelebb a 3. és 5. sort szeretném elrejteni akkor hasonlóképpen...
Remélem érthető a felvázolt helyzet.
Köszönöm! -
Delila_1
veterán
válasz
slashing #23474 üzenetére
Sub tele_e()
Dim usor As Long, uoszlop As Integer, oszlop As Integer, maxx As Long, f As Boolean
uoszlop = Range("D4").End(xlToRight).Column
For oszlop = 4 To uoszlop
usor = Cells(Rows.Count, oszlop).End(xlUp).Row
If usor > maxx Then maxx = usor
Next
For oszlop = 4 To uoszlop
If Application.CountA(Range(Cells(4, oszlop), Cells(maxx, oszlop))) <> maxx - 4 + 1 Then
f = True
End If
Next
If f Then MsgBox "Hiányos" Else MsgBox "Rendben"
End Sub -
slashing
senior tag
válasz
Delila_1 #23473 üzenetére
Nem használhatjuk a Selection.CurrentRegion.Select mivel körbe van bástyázva egyéb adatokkal a vizsgálandó terület :/
illetve mindenképpen külön kell vizsgálni a fejlécet mint az adatokat mivel ha a fejléccel együtt jelöljük ki az adatokat akkor előfordulhat az eset hogy jónak minősíti azt is ha több oszlopban van adat mint ahány fejléccel elátott oszlop van viszont azok nem foghíjasan vannakha meg külön vizsgálom viszont csak egy sorban vannak adataim akkor meg valamiért kijelöli lefele az összes üres sort is az ActiveCell.End(xlDown).Row így meg értelmét veszti a countA mivel tuti talál üres cellát a kijelölésben
ez az alap felépítés, a sárga területen jobbra nem nyúlhatnak túl az adatok lefele meg bármennyi lehet. Ez nem fix szélességű 20 különböző variáció van a fejlécekre
-
Delila_1
veterán
válasz
slashing #23472 üzenetére
Sub tele_e()
Dim sorok As Long, oszlopok As Integer
Range("A4").Select
Selection.CurrentRegion.Select
sorok = Selection.Rows.Count: oszlopok = Selection.Columns.Count
If sorok * oszlopok <> Application.CountA(Selection) Then
MsgBox "Hiányos kitöltés"
Else
MsgBox "Rendben"
End If
End Sub -
slashing
senior tag
Mit rontok el?
A következőt kéne ellenőrziznem:
D4-től egy sorban vannak a fejléc adatok(az adatok megnevezése) bármilyen szöveg/szám akármi lehet... alattuk az adatok. Azt akarom megvizsgálatatni hogy a fejléc hány oszlopos illetve az alattuk lévő adatok hány oszlopban vannak ha nem egyenlő akkor exit sub, illetve ha ugyan egyenlőek az oszlopok de pl. foghíjasan vannak az adatok akkor szintén exit... ez utóbbit úgy gondoltam hogy ha a kijelölt tartományban vannak üres cellák akkor az biztos hibás
Tehát a lényeg, ahány fejlécoszlop van annyi oszlopban kell legyen adat és azok nem lehetnek néhány helyen üresek, egyik oszlopban sem lehet több adat mint a többiben az adatok nem nyúlhatnak túl a fejlécoszlopokon
Sub hibaell()
Dim kijeloles As Range
Set kijeloles = Selection
Range("D4").Select
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(4, ActiveCell.End(xlToRight).Column)).Select
hanyoszlop = Selection.Columns.Count
Range("D5").Select
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Select
hanyoszlop2 = Selection.Columns.Count
ures = Application.WorksheetFunction.CountBlank(kijeloles)
If hanyoszlop <> hanyoszlop2 Or ures > 0 Then
MsgBox ("Hibás")
Exit Sub
Else
MsgBox ("jó")
End If
End Sub -
Fferi50
Topikgazda
válasz
Mittu88 #23467 üzenetére
Szia!
A Public deklaráció nem azt jelenti, hogy globálisan van generálva a változó. Az osztálymodulokban (Thisworkbook, Munkalapok kódmoduljai, stb) deklarált Public változók is elérhetőek mindenhonnan, csak az általam korábban már mutatott módon. (Ha elkezded írni bárhol máshol pl. Thisworkbook. a pont után láthatod a többi tulajdonság között a Public módon deklarált változókat is.)
A Global deklaráció csak standard (nem osztály) modulban használható.
A Public deklaráció standard modul esetén szintén nem kér teljes nevet, mert ott megtalálja.Üdv.
-
-
Delila_1
veterán
válasz
Mittu88 #23464 üzenetére
Próbáld ki Munka1-ről indítva a lentieket.
A change eseményt a Munka1 laphoz vidd be, a másikat modulba.Private Sub Worksheet_Change(ByVal Target As Range)
MásikMakró Target.Row, Target.Column, Target.Value
End Sub
Sub MásikMakró(sor, oszlop, nev)
Munka2.Cells(sor, oszlop) = nev
End SubVáltozók értékét így is átadhatod másik makrónak. Arra ügyelj, hogy a fogadó makróban ugyanaz legyen a változók sorrendje, mint az indítóban. Látod, nem kell azonosaknak lenniük a neveknek, ám a Change makróban felvehetsz 3 változót az átadáshoz – de minek?
-
Mittu88
senior tag
válasz
Delila_1 #23463 üzenetére
Hogy kell úgy változót deklarálni, hogy mindenhol ugyanaz legyen?
ThisWorkbook-on deklaráltam egy 'valtozotte' nevű boolean változót úgy, hogy Public valtozotte as Boolean, de a Worksheet eseményeinél azt írja, hogy nincs deklarálva <Expression not defined in this context>
Ha nem Public-kal kell, akkor hogy?szerk.: Bocsi, véletlenül a válaszol-ra nyomtam.
-
bbTamas77
aktív tag
Van egy problémám, Excel-be importáltam adatokat egyszerű szerkezetű Access táblából.
Importálás sikeresen lefutott, majd automatikusan megjelent a fejléceknél a szűrő gombjai.
A mezők adattípusait beállítottam annak megfelelően.
Amikor egy adatra hivatkoznék, hasonló formátumot ír ki:
=Táblázat_Rendelesek[[#Ez a sor];[Költség]]
Hogyan lehetne megoldani, úgy, hogy A2+D2 formátumú legyen?
-
pdw_ph
tag
Mivel a topik nagyja VBA-ról szól, érdekelne, hogy mi a véleménye a szakértőknek annak jövőjéről?
Azzal valszeg mindenki egyetért, hogy egyhamar nem fog kihalni, de pl. ha azt nézzük hogy a Power BI dolgok (Power Pivot / Query / View / stb.) talán a legfelkapottabb dolgok manapság és amik már tudtommal abszolút nincsenek VBA-képessé téve én elgondolkodtam rajta, hogy vajon meddig fogja a Microsoft alkalmazni a VBA-t... -
Mittu88
senior tag
válasz
Mittu88 #23458 üzenetére
Hátha érdekel másokat is:
Ha a cella képletet tartalmaz ( = jellel kezdődik), enterre a sorrend: Calculate -> Change -> Selectionchange.
Ha csak beírunk valamit, NINCS Calculate.
Ha van érvényesítés és rossz értéket írunk be, annyiszor lefut a Change esemény, ahányszor módosítani akartuk a cella értékét. -
-
Fferi50
Topikgazda
Szia!
A ciklus(ok) kb. így néznének ki:
sub masolom()
set m1=sheets("Munka1") ' ahonnan másolok
set m2=sheets("Munka2") ' ahova másolok
m2sor=2 'ide jön a másolás első sora
for xx= 2 to m1.usedrange.rows.count
if not isempty(cells(xx,1)) then
for yy=2 to 13
m2.cells(m2sor,1).value=m1.cells(xx,1).value
m2.cells(m2sor,2).value=m1.cells(xx,yy).value
m2.cells(m2sor,3).value=yy-1
m2sor=m2sor+1
next
endif
next
end subElvileg a Munka1 munkalap minden sorát átmásolja a Munka2-be függőlegesen, az első oszlopba beírja mindig a terméknevet, a második oszlopba a hónap adatát, a harmadik oszlopba a hónap számát.
Üdv.
-
gyu84
tag
Üdv!
Makróval kapcsolatban szeretnék segítséget kérni.
Adott egy 13 oszlopból álló táblázat, az A oszlopban termékek, a B-M oszlopkban pedig havi bontásban szám értékek. Ezt úgy kellene egy másik fülre átmásolni, hogy a hónapok egymás alá mennének, az A oszlopban maradna a terméknév 12x egymás alatt, a B-ben a számérték, a C-ben pedig 1-12-ig a hónapok száma, amit elmentek CSV-ként. Próbáltam keresni olyan makrót ami nem összefüggő tartományokat másol, de nem sikerült használhatót találnom.
Segítséget előre is köszönöm! -
Fferi50
Topikgazda
Szia!
Szerintem a makrót a teljes nevével kell meghivatkozni. Ezt meglesheted, ha megnyitod mindkét munkafüzetet, majd a fejlesztőeszközök - makrók menüpontra kattintva láthatod, hogy az aktív munkafüzet makrói "simán", a másik munkafüzetéi pedig "hosszú névvel" vannak az ablakban.
Ez alapján próbáld.
(Bár én inkább beletenném az y makrót is az első munkafüzetbe (ha lehet), pláne, ha utána már nem csinál semmit egyik munkafüzet sem.)
Üdv.
-
Wyll
őstag
Üdv
Hogyan lehet makrobol elindítani egy másik (már megnyitott) file másik makróját?
A következőt szeretném:
a.xlsm fileban elindítom az x makrót. Futása soran ez megnyitja b.xlsm file-t. Ott csinál ezt-azt (aktív a b.xlsm workbook), majd meghívja b.xlsm file y makróját. Y szépen lefut, majd visszaadja a vezérlést x-nek.
Mellesleg ekkor x is befejeződik, es b.xlsm maradjon aktív.Szoval ezt hogyan kellene?
-
Fferi50
Topikgazda
válasz
Mittu88 #23446 üzenetére
Szia!
Akkor produkálja ezt a hibát szerintem, ha a selection_change úgy következett be, hogy nem volt előtte egyik cellában sem változás (pl. egy celláról simán tab-bal ment tovább valaki, vagy csak belekattintott valahonnan).
Próbáld ezt a selection_change -nél, mielőtt a cells(sor,1) utasításra mennél:
if sor=0 then msgbox "Nem volt változás" :exit subTermészetesen a then után azt írsz be, amit szeretnél, hogy végrehajtódjon. Pl. adhatsz értéket a sor változónak.
Üdv.
-
Mittu88
senior tag
válasz
m.zmrzlina #23433 üzenetére
Köszönöm szépen, Fferi-nek is
Viszont felmerült egy másik probléma:
Van egy ilyen kódom:
Public sor As Integer
...
Private Sub Worksheet_Change(ByVal Target As Range)
sor = Target.Row
...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nev As String
...
nev = Cells(sor, 1).Value
...És erre azt a hibaüzenetet dobja, hogy Application-defined or object-defined error.
A sor változó értéke 0, tehát nyilván nem tudja a nev változónak egy nem létező cella értékét adni. De mitől 0 a sor értéke?
Próbáltam a sor = ActiveCell.Row parancsot is, de ugyanez van. -
lappy
őstag
válasz
m.zmrzlina #23442 üzenetére
Minden naphoz más-más terem illetve időpont tartozhat.
A táblázatban nincs egyesített cella csak a képen nem jól látszik. -
.OM.
aktív tag
válasz
m.zmrzlina #23440 üzenetére
-
m.zmrzlina
senior tag
Két kérdés:
A munkalapon közös keretben lévő cellák egyesítve vannak vagy külön cellák csak a keretük közös? (gyanítom külön cellák) Ha van köztük egyesített, melyek azok?
A különböző napokhoz tartozó űrlap részletek nyilván nem véletlenül különböznek. Van rá lehetőség, hogy egységes fejlécet kapjanak?
-
.OM.
aktív tag
válasz
m.zmrzlina #23429 üzenetére
Szia,
Csúcs, de az 1. sort nem viszi.. Tehát a 2. sor színe megy az 1. sorba az új fülön.
Mindegy, mert a címsort nem kell színezni, a végén majd azt beszúrom...+1 #pirospont m.zmrzlina részére
-
Fferi50
Topikgazda
Szia!
Csinálsz egy un. "belépő" lapot. Amikor belép a felhasználó, csak ezt látja.
Egy cellát "kinevezel" felhasználónak ezen a munkalapon. Ehhez rendeled adatérvényesítéssel (adatok - érvényesítés - lista) a lehetséges belépők listáját - amit tehetsz egy elrejtett munkalapra, vagy az adott munkalap nem látható/elrejtett oszlopába.
Amikor belép,csak ez a "belépő" munkalap látszik, a legördülő listából kiválasztja magát. Ha ez megtörtént, megmutatod neki az ügyeleti beosztást. Ha nem választ a listából, akkor csak a "belépő" lapot látja továbbra is. (A nem választást úgy figyelheted, hogy adsz egy "semleges" értéket a lista elejére (pl. Válassz), ami megjelenik belépéskor. Ha a cella értéke ez, akkor még "nem lépett be".Üdv.
-
m.zmrzlina
senior tag
válasz
Mittu88 #23432 üzenetére
Kijelölt cella értékének változóba írása:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$I$6" Then 'ide jön, hogy melyik celláról van szó
ertek1 = Target.Value
End If
End SubMódosított cellaérték változóba írása:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$6" Then 'ide jön, hogy melyik celláról van szó
ertek2 = Target.Value
End If
End Sub -
bteebi
veterán
- amikor megnyitom a fájlt akkor kérje be a nevet (Ok gomb ha megadta- addig szürke legyen)
- ha nincs ilyen név akkor írja ki hogy " Nincs beosztva"Szerintem jobb lenne, ha begépelés helyett inkább egy legördülő lista lenne, ahol mindenki kiválaszthatja a saját nevét. Ha be kell gépelni, akkor hibázni fognak, ráadásul kevésbé kényelmes. A begépeléshez egy mezei InputBoxra lenne szükséged, a legördülő lista viszont valamelyest macerásabb, ahhoz UserForm kell ComboBoxszal.
-
lappy
őstag
Sziasztok!
Van egy táblázatom amiben ügyeleti beosztás van. Több név ami többször előfordulhat.
A következőt szeretném:
- amikor megnyitom a fájlt akkor kérje be a nevet (Ok gomb ha megadta- addig szürke legyen)
- ha nincs ilyen név akkor írja ki hogy " Nincs beosztva"
- ha van találat akkor azoknak a celláknak a háttér színét emelje ki vmilyen színnel vagy olyat lehet hogy csak azok a nevek maradjanak amit éppen beírtak ( a többi eltűnik) ? (de gondolom az első megoldás könnyebb)
- olyat lehet-e hogy kiírja a megadott név melyik nap melyik teremben ill. mettől - meddig ügyel?? -
m.zmrzlina
senior tag
Próbáld ki ezt! Szerintem közel van ahhoz amit szeretnél. Úgy indítasz, hogy kijelölöd azt a tartományt aminek a szineit másolni szeretnéd és elindítod a makrót.
Sub masol()
Dim intSorok As Integer
Dim intOszlopok As Integer
Dim arrCopyColor()
intSorok = Selection.Rows.Count
intOszlopok = Selection.Columns.Count
ReDim arrCopyColor(intSorok, intOszlopok)
For i = 0 To intSorok
For j = 0 To intOszlopok
arrCopyColor(i, j) = Cells(ActiveCell.Row + i, ActiveCell.Column + j).DisplayFormat.Interior.Color
Next
Next
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "colors"
For i = 1 To intSorok
For j = 1 To intOszlopok
Cells(i, j).Interior.Color = arrCopyColor(i, j)
Next
Next
End Sub -
.OM.
aktív tag
válasz
m.zmrzlina #23425 üzenetére
Sajnos pont egy bitang nagy riport közepén vannak a kérdéses színek, és minden irányban változó, hogy hol lenne szabad hely. A fehér szín nem okoz gondot, csak a buta színeket kell ráhúznom más adatokra.
..marad a 220 oszloppal keletre tolás és a lefestés utólag.Végül is megoldódott, köszi
-
m.zmrzlina
senior tag
Ugye a legprofibb megoldás gondolom az lenne, hogy egy változóba kiírkálni a cellák DisplayFormat.Interior.Color tulajdonságát majd egy újonnan létrehozott munkalapon visszaírni.
Vagy a másik, hogy ha van elég hely a munkalapodon akkor annyi oszloppal jobbra (vagy sorral lejjebb) másolni a formátumot ahol már nem zavar aztán Ctrl+C > formátum másolása az új munkalapra.
Nyilván te is észrevetted, hogy annyit sántít a megoldás, hogy a nofill (nincs kitöltés) hátterű cellákból fehér (colorindex 2) hátterű cellák lesznek. Nem tudom ez mennyire baj.
-
Mittu88
senior tag
Azt hogy lehet megcsinálni, hogy ha ráállok egy cellára, egy változó eltárolja az értékét, és ha megváltoztatják, egy másik változó eltárolja az új értékét?
A SelectionChange-be meg tudtam oldani, hogy a régit tárolja egy globális változó, a Worksheet_Calculate-be meg az újat akartam, de ha ENTER-rel vagy TAB-bal változtatják meg a cella értékét, akkor annak a cellának az értékét tárolja, amelyikRE ugrott enter-rel vagy tab-bal.
-
.OM.
aktív tag
válasz
m.zmrzlina #23418 üzenetére
Köszönöm kedves Hóember!
Ha jól értem, ez 10 oszloppal jobbra teszi be a színeket - remekül működik, köszi!
Szerinted ki lehet tenni vágólapra és utána én választhatom meg, hogy vol legyen?
Esetleg egy új "colors" fülre A1-től beilleszteni?..arra már rájöttem, hogy nem egész oszlopot kell kijelölni, mert az kicsit megfogja a gépet..
Köszi,
.om. -
m.zmrzlina
senior tag
válasz
Excelbarat #23421 üzenetére
Ezzel a megoldással csak egy probléma van. Az eredeti kérdés az volt, hogy hogyan lehet feltételesen formázott cellák háttérszíneit lemásolni. Arra pedig ez a kód nem jó.
Amúg szép, ha megengeded használni fogom.
Ha már szinek:
Két rendszergazda beszélget:
-Na milyen az új barátnőd?
-Ne is kérdezd tökéletes. Csúcs ahogy kinéz. 90-60-90
-Nebasz!!! Sötétlila???? -
Excelbarat
tag
válasz
m.zmrzlina #23420 üzenetére
Színezésre egy másik megoldás (sajnos nem tudom, h korábbi verziónál működik-e):
Sub szinez()
Dim r
Dim g
Dim b
Dim i
For i = 1 To 5
r = Range("A" & i).Interior.Color Mod 256
g = (Range("A" & i).Interior.Color Mod 256 ^ 2) \ 256
b = Range("A" & i).Interior.Color \ 256 ^ 2
Range("C" & i).Interior.Color = RGB(r, g, b)
Next i
End SubAz "A" oszlop 1sorától az 5-ig a színeket átmásolja a "C" oszlop ugyan ezen soraiba.
Ha esetleg valaki makróval akar színezni diagramm oszlopokat így lehet (nálam épp ehhez kellett):
ActiveSheet.ChartObjects("chart1").Activate
ActiveChart.SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(r, g, b)Üdv,
Excelbarát -
Fferi50
Topikgazda
válasz
m.zmrzlina #23418 üzenetére
Szia!
Ez a kód 2010-es verziótól jó. Korábbi verziókban nem működik.
Üdv.
-
m.zmrzlina
senior tag
Nekem ezzel a kóddal sikerült lemásolnom (Excel 2010 alatt) egy korábbi munkalapon a feltételes formázás színeit:
Sub masol()
For Each cella In Selection.Cells
cella.Offset(0, 10).Interior.Color = cella.DisplayFormat.Interior.Color
Next
End SubEz a kód a kijelölt tartomány minden cellájának (feltételesen és nem feltételesen formázott) színét 10 oszloppal jobbra másolja.
Ja innen loptam, kipróbáltam és működött. (jsmith4892002 2012 aug 19.-i hozzászólása)
-
Fferi50
Topikgazda
Szia!
Szerintem ez elég bonyolult makróval oldható meg csak, mivel a feltételes formázás feltételeit kell megvizsgálnod, hogy az adott cellára melyik teljesült.
Makróban pl. a cells(1,1).formatconditions(x).interior.color adja meg a szín számát, ahol
cells(1,1) az A1 cella, formatconditions(x) az x-edik feltételes formázás. Hogy hány feltételes formázás van az adott cellánál, azt pedig a cells(1,1).formatconditions.count eredménye adja meg.
De a feltételes formázásnak sok egyéb tulajdonsága is van még, amiket mind meg kellene nézni, hogy teljesül-e a cellára (típusa, a tipustól függően a hozzá tartozó kifejezés, operátor....).
Én most nem vállalkoznék egy ilyen makró megírására....Üdv.
-
bteebi
veterán
válasz
Fferi50 #23410 üzenetére
Nagyon köszönöm a segítséged
, már majdnem jó
.
Sub osszeir()
Dim ws As Worksheet, i As Integer, cella As Range
i = 2
For Each ws In ActiveWorkbook.Worksheets
If Left(ws.Name, 5) = "Lista" Then
For Each cella In ws.UsedRange
If cella.Interior.Color = RGB(141, 180, 226) Then
Sheets("Összefoglaló").Cells(j, 3).Value = ws.Cells(5, (cella.Column \ 2) * 2) & " - " & ws.Cells(cella.Row, 1) & " - " & ws.Cells(6, cella.Column)
i = i + 1
End If
Next
End If
Next
End SubA Sheets("Összefoglaló").Cells(j, 3).Value = ws.Cells(5, (cella.Column \ 2) * 2) & " - " & ws.Cells(cella.Row, 1) & " - " & ws.Cells(6, cella.Column) sornál akad el, "Application-defined or object-defined error"-ral. Sajnos nem megy se ws-sel, se anélkül.
#23411: Neked is köszönöm Delila
. Az összevont cellás részt egyébként megoldottam így: (cella.Column \ 2) * 2. A "\" (mint újonnan ismét megtanultam) egész osztást végez, a mod (ezt is el szoktam felejteni) pedig a maradékos osztás maradékát adja meg. Például 14\3 = 4, 14 Mod 3 = 2.
-
.OM.
aktív tag
Szervusztok,
Van egy szép nagy táblázatom feltételes formázással színezve.
Egy másik táblázatot szeretnék kifesteni pontosan ennek a mására, de ott nincsenek értékek, nem teljesül semmilyen feltétel.
Hogyan tudom csak a színeket átmásolni? Formázás beillesztése pl nem működik, mert nincs érték amit formázzon. Nekem bután csak a kitöltés színeket kéne rátenni egy üres fülre.
Köszi előre is,
.om. -
Wyll
őstag
válasz
m.zmrzlina #23412 üzenetére
köszönöm, ezt is megnézem - majd holnap
köszi szépen! -
m.zmrzlina
senior tag
Vagy nézd meg ezt:
Sub vaneilyen()
Dim File As String
File = InputBox("Add meg a keresett fájl nevét! (kiterjesztéssel együtt)")
Dim DirFile As String
DirFile = ThisWorkbook.Path & "\" & File
If Dir(DirFile) = "" Then
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=DirFile
'vagy
'Workbooks.Open Filename:=másikfájl
'kitölteni a megfelelő adatokkal
'és menteni a kívánt néven
Else
Workbooks.Open Filename:=DirFile
End If
End SubEz a kód ebben a formájában abban a mappában keres amiben a kódot tartalmazó munkafüzet van.
-
Delila_1
veterán
válasz
bteebi #23407 üzenetére
Teljesen jó lenne (szemre, nem próbáltam ki), ha nem lennének az 5. sorban összevont cellák.
Javaslom, hogy a 4. sorban minden cellába írd be a Város 1-et, Város 2-t, stb. Itt a karakterek színe egyezzen meg a háttér színével, és erre az új sorra hivatkozz. El is rejtheted a 4. sort. -
Fferi50
Topikgazda
válasz
bteebi #23407 üzenetére
Szia!
"For i = 1 To Worksheets.Count
If Left(ws.Name, 5) = "Lista" Then"Hol adod meg a ws értékét?
Helyette: For each ws in activeworkbook.worksheets
if left(ws.name,5)="Lista" then" ws.Activate
For Each cella In ActiveSheet.UsedRange"Nem kell aktívvá tenni a munkalapot, hogy tudj vele dolgozni.
Helyette: For Each cella in ws.usedrangeViszont akkor e helyett " Sheets("Összefoglaló").Cells(j, 3).Value = Cells(5, cella.Column) & " - " & Cells(cella.Row, 1) & " - " & Cells(6, cella.Column)"
ezt kell írnod: Sheets("Összefoglaló").Cells(j, 3).Value = ws.Cells(5, cella.Column) & " - " & ws.Cells(cella.Row, 1) & " - " & ws.Cells(6, cella.Column)
A végén levő next i helyett pedig sima next (az első for each bezárására).
Üdv.
-
Delila_1
veterán
Sub megnyit()
Dim FN As String
FN = "MegadottNev.xlsm"
On Error GoTo Nyit
Workbooks.Open "C:\Temp\proba.xlsx"
On Error GoTo 0
GoTo Folytatas
Nyit:
Workbooks.Open "C:\Temp\alapfile.xlsx"
On Error GoTo 0
Folytatas:
'Ide jön a pár adat kitöltése
'mentés a megadott mappába, az FN változóban megadott névvel
ActiveWorkbook.SaveAs Filename:="C:\Temp\" & FN, FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub -
bteebi
veterán
Sziasztok!
Van több munkalapon néhány táblázat, amikben bizonyos cellák kék hátterűek (RGB kód: 141, 180, 226). Ezeket a cellákat kellene kigyűjtenem egy külön lapra ("Összefoglaló") bizonyos elnevezési szabály alapján. A kép alapján érthető(bb) lesz.
Vegyük mondjuk a C12-es cellát. Kék hátterű, és úgy kellene kiírni az "Összefoglaló" lapra (a C2-es cellától kezdve lefelé), hogy Város 1 - 20150106 - du.; a többi kék cella ennek az analógiájára lenne elnevezve.
A munkafüzetben nagyon sok munkalap van, és csak a "Lista" névvel kezdődőeknél vannak ilyen cellák, ezért összességében felgyorsítaná a folyamatot, ha csak ezeket a lapokat nézné végig a makró.
Egyelőre eddig jutottam, de minden bizonnyal több hiba is van benne. Tudnátok segíteni a kijavításában?
Sub osszeir()
Dim ws As Worksheet, i As Integer, j As Integer, cella As Range
j = 2
For i = 1 To Worksheets.Count
If Left(ws.Name, 5) = "Lista" Then
ws.Activate
For Each cella In ActiveSheet.UsedRange
If cella.Interior.Color = RGB(141, 180, 226) Then
Sheets("Összefoglaló").Cells(j, 3).Value = Cells(5, cella.Column) & " - " & Cells(cella.Row, 1) & " - " & Cells(6, cella.Column)
j = j + 1
End If
Next
End If
Next i
End Sub -
Wyll
őstag
Szaisztok!
Vannak-e az excel vba-nak filekezelő függvényei?
Szeretnék egy makrót, ami:
- leellenőrzi, hogy egy bizonyos nevű file létezik-e már,
- ha igen, akkor megnyitja
- ha nem, akkor ilyen néven hozzon létre egy file-t, és azt nyissa meg
(utóbbi műveletet inkább úgy kéne megvalósítani, hogy egy már biztosan létező alapfile-t nyit meg, amiben kitölt pár értéket, majd mentés másként, pont a megadott néven.)Szóval ezt meg lehet csinálni?
Ha igen, akkor ehhez a fontosabb parancsokat le tudná valaki írni nekem? -
slashing
senior tag
a \w{3,}\s\w{3,} lenne a legjobb pattern ha nem lenne ékezet a nyelvünkben de mivel van így szívás az egész úgyhogy abbahagyom, ma nem is akartam már semmit csinálni az excelben erre reggel óta szórakozok vele
-
slashing
senior tag
Nah találtam valamit a regexp-re
engedélyezni kell az editorban a Tool/References/ a Microsoft VBScript Regular Expressions 5.5-ötcsak a .Pattern részét írtam át ami úgy tűnik hogy hogy vezeték és keresztnév legyen szóközzel elválasztva JÓ bár a csak szóközre is jó még. Egy megfelelő patternel ez már kiküszöbölhető.
Sub nevellenorzes()
Dim Done As Boolean
Dim S As String
Dim RegEx As RegExp
Set RegEx = New RegExp
Do Until Done
S = Application.InputBox("Add meg a nevet:")
With RegEx
.Pattern = "([a-zA-Z]*)\s([a-zA-Z]*)"
Done = .Test(S)
End With
Loop
MsgBox S, vbOKOnly
End Sub -
Delila_1
veterán
válasz
slashing #23400 üzenetére
Azért egy másik, ami azt figyeli, hogy a saját felhasználói neveddel léptél-e be.
Sub mmmm()
Dim nev$
nev$ = Application.InputBox("Add meg a neved!", "Név bekérése", , , , , , 2)
If nev$ <> Environ("username") Then
MsgBox ("Te kis huncut, nem vagy jogosult a füzetet használni!"), vbOKOnly + vbExclamation
Exit Sub
Else
MsgBox "Tovább..."
'makró többi része
End If
End Sub
Új hozzászólás Aktív témák
Hirdetés
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Sea of Thieves Premium Edition és Egyéb Játékkulcsok.
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Vírusirtó, Antivirus, VPN kulcsok
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Samsung Galaxy A13 64GB, Kártyafüggetlen, 1 Év Garanciával
- LG 39GS95UE - 39" Ívelt OLED / QHD 2K / 240Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
- Lenovo ThinkStation P520 Workstation! W-2145, 64GB, 512 SSD /Quadro - Számla, garancia
- Üzleti Fujitsu Lifebook u7510 15,6" FHD IPS 2021/08. havi gyártás
- Bomba ár! Dell Latitude 7320 - i5-11GEN I 8GB I 512SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged