-
IT café
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
-
Fferi50
őstag
Szia!
Nézd meg a Filedialog objektumhoz tartozó helpet az excel VBA -ban.
Többfunkciós és többféle alapértelmezést is adhatsz neki.
De ne feledd, ha a felhasználóra bízod a mentés nevének megadását, akkor nem lehetsz biztos abban, hogy nem változtatja meg azt....
Szerintem sokkal jobb, ha magad adod meg a nevet és mented a filet. Szóval én nem dobnék fel dialog ablakot.Ha nem akarod, hogy a fájlmentés miatt megváltozzon az eredeti fájlod neve, akkor használd a
workbook.savecopyas filename formátEkkor nem változik meg a használt fájlod állapota.
Üdv.
-
Fferi50
őstag
Szia!
Van egy dolog, amire még oda kell figyelni: Ha nem választanak, akkor nem fog a mentésed lefutni.
Ezért ezt a részt egy kicsit módosítani kell:With fd
.InitialFileName = Range("gyariszam") & "_jegyzokonyv"
.FilterIndex = 2 'xlsm, azaz makróbarát munkafüzetként
---------
.Show
.Execute
----------
helyett
if show=-1 then
.execute
else
msgbox "Nem választottál, a mentés nem történt meg!",vbinformation
endif
End WithHa mindenképpen kell, hogy legyen mentés, akkor figyelned kell, hogy megtörtént-e. Amennyiben nem, úgy meg kell ismételtetni.
Üdv.
[ Szerkesztve ]
-
Delila_1
Topikgazda
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 SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
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.
-
Fferi50
őstag
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.
-
Fferi50
őstag
Szia!
Tedd a kódot a Userform Activate eseménybe (is).
Egyébként lehetne rövidebben:
Private Sub togbutTranslate_Click()
Range("b_forditocellak").EntireColumn.Hidden = Not Range("b_forditocellak").EntireColumn.Hidden
End Sub
Private Sub UserForm_Activate()
Me.togbutTranslate.Value =Not Range("b_forditocellak").EntireColumn.Hidden
Me.labVersion.Caption = "Jegyzőkönyv verziója: " & Worksheets("MAGYAR").Range("N2").Value
End SubÜdv.
-
Fferi50
őstag
Szia!
Az Initialize csak egyszer fut le, akkor amikor betöltődik a form.
Az Activate mindig, amikor megjeleníted.Elképzelhető, hogy mást kell csinálnia az első megjelenéskor, mint a következőknél, ahhoz, hogy jól működjön.
Szerintem most az inicializálást el lehet hagyni. (De próba és már meg is tudod....)Üdv.
-
Delila_1
Topikgazda
Ahol szóköz van, aposztrófok közé kell tenned az egészet.
indirekt("'elérési út'" & ...
Rossz példa, mert az eleresiut éppen egy cellában van, de így talán érthető.
Szóközzel ritkítva a láthatóság kedvéért:" ' elérési út ' "
Egyébként bevett szokás alsó kötjelet használni szóközök helyett, akkor nincs szükség ilyen cifraságokra.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
bteebi
veterán
Amúgy az összefűz (concatenate) függvény helyett érdemesebb simán az ampersandet ("&") használni, egyszerűbb és átláthatóbb. Ha mondjuk azt írod be egy cellába, hogy ="ABcD" & "szóköz 1" & "2", akkor az lesz az eredmény, hogy "ABcDszóköz 12".
Cancel all my meetings. Someone is wrong on the Internet.
-
Delila_1
Topikgazda
Laphoz rendelve a click esemény:
Private Sub ToggleButton1_Click()
If ToggleButton1 Then
Range("b_forditocellak").EntireColumn.Hidden = False
Else
Range("b_forditocellak").EntireColumn.Hidden = True
End If
End SubKét másik, modulba helyezett makró helyettesíti a Te másik makródat.
Sub IGAZ()
Munka1.ToggleButton1 = True
End Sub
Sub HAMIS()
Munka1.ToggleButton1 = False
End SubÍgy nem "csúszik el".
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
Szia!
A formokon (és a munkalapokon) levő vezérlők eseménykezelésére nem hat az application.enableevents beállítása (sajnos).
Ezért ott trükkökhöz kell folyamodni.
Mielőtt kiadod az értékadó utasítást, megnézed a gomb jelenlegi értékét és az adott oszlop láthatóságát, ha megfelelő mindkett, akkor nem kell kiadni az utasítást. Ha nem jól áll valamiért (pl. a gomb benyomva, az oszlop pedig látszik - vagy fordítva), akkor az oszlop láthatóságát állítod és nem a gombnak adsz értéket.Üdv.
-
Delila_1
Topikgazda
A Munka1 lapra tettem a ToggleButton1 nevű gombot. A click eseménye szerint változik a b_ ... nevű cella (cellák?) oszlopának a láthatósága, fordítottan, mint ahogy később leírtad, mit szeretnél. A makróban fel kell cserélni a True, ill. a False helyét.
Ha az IGAZ makrót indítod, az csak akkor váltja ki a Click indulását, ha ezzel megváltozik a gomb állapota. Ugyanez vonatkozik a HAMIS makró indítására is.
Itt az lenne a célod, hogy a gomb egyik állapotában az angol szavakat tartalmazó oszlop látsszon, másikban egy másik nyelvé?
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
Elég a láthatóság megfordításához az a makró, amit a Click eseményhez írtam, nem kell külön másikban fordítani. A Then és az Else ágak elvégzik a munkát.
Ezt a másik makrót nem értettem, míg nem közölted az AngolCellakOnOff makrót.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
Szia!
Nem kell a külső hivatkozásoknál nyitva lennie a hivatkozott fájlnak, csak akkor ugynevezett 3D-s neveket úgy kell használnod, hogy a fájlok teljes - elérési utat is tartalmazó - nevét kell betenned.
Kipróbálhatod a következőt: Megnyitod a cél és a forrás fájlt is. A célfájlban megcsinálod a hivatkozást.
Utána bezárod a forrásfájlt. Azt fogod látni, hogy megjelenik a teljes fájlnév a hivatkozásban. Ha ezt a hivatkozást tovább másolod a következő cellákba, akkor azokban is láthatóvá válik az eredmény. (Azaz ilyen módon "bele lehet látni" meg nem nyitott fájlokba is!)Én az indirektet ilyen esetekben nem szeretem használni - de ez ízlés kérdése -, inkább azt szoktam csinálni, hogy a képlet összetevőit tárolom különböző cellákban. Szükség esetén a megfelelő cellákba makróval beírom a képletet (pl. a fájl megnyitásakor), majd azonnal be is "helyettesítem" az értékükkel.
Tehát az adott cellára konkrétan írom be, cella.formula="Xyfájl.munkalapja!A1".Természetesen a formulában, ha kell szerepel az aposztróf és a szögletes zárójel is (általában kell).
Ha minden cellának megvan a képlete és az eredménye, akkor átváltom értékre.Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
Szia!
"Pl. minden megnyitáskor újrafrissítem ezeket makróból?"
Ez így van, akkor nincs mire rákérdeznie, ha nincs élő külső hivatkozás, a frissítés pedig a nyitási procedúrába belefér.
De lehet erre egy gombot is kijelölni /vagy billentyűkombiációt/, ami szintén végrehajtja a frissítést kérésre.
Üdv.
-
Fferi50
őstag
Még ezeket tenném hozzá:
A megnyitáskori frissítésre rákérdezést "el lehet nyomni" és le lehet tiltani a frissítést.
A hivatkozásokat meg lehet változtatni makróból is, meg a nyitott munkafüzetben menüből is.
Természetesen az értékké alakítás csak akkor járható út, ha nem gyakran frissülő adatkapcsolatokról van szó.
Mivel én ilyen célra nem használom az indirekt függvényt, így nem is tudom megmondani, hogy nem nyitott forrásfájlnál mit csinál. Ha azt mondod #HIV hibát "eredményez" , az már egy ok arra, hogy ne is használd, hiszen soha nem tudhatod, hogy nyitva van-e a forrásfájl, illetve akkor arról kell makróból "gondoskodni", hogy legyen mindegyik nyitva.
Ha tudod, hogy milyen forrást szeretnél mire változtatni - márpedig tudod, hiszen az "indirekt" cella tartalmát ismered változás előtt és azt is, amire szeretnéd cserélni, akkor működik a cellákban levő "direkt hivatkozás" cseréje is "egyszerű" range.cserél metódussal. Az "indirekt" értéket tartalmazó cellát ebben az esetben a régi hivatkozás forrásaként lehet használni, de nem ezzel kell összeállítani a cella képletét.
Üdv.
-
Delila_1
Topikgazda
2007-től elég lükén oldották meg. Kijelölöd a formázandó tartományt, ez lesz az érvényesség címe.
Megadod a formátumot. Ezután ha az érvényességen belüli cellán állva behívod a feltételes formázást, azt a képletet mutatja, ami az érvényesség bal felső cellájára vonatkozik.Régebbi verzióban még az adott (aktív) cellára vonatkoztatott képletet látod.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
LordVader80
senior tag
öÖö ezt most hirtelen nem látom át, pláne miután bevittem az 50 feltételt
hogy működik ez?egyébként ha a háttér is érdekel: adott 4 havi munkaidőkeret, amit a belépés napjától kell megjeleníteni.
A sorok a jövő évi naptári napok egymás alatt, az értékek képlettel kerekítve az az érték, ahány hónapja itt dolgozik az illető, és ehhez kell, hogy 4 havonként lássuk (a belépés dátumához igazodva, ami változhat, ha valaki kilép és új kerül a táblába a helyére), mikor telik le az aktuális munkaidőkeret.[ Szerkesztve ]
May The Force Be With You!
-
LordVader80
senior tag
Közben felhasználtam az általad javasoltat, és szuperül működik.
Annyit módosítottam, hogy negyedéves ciklust kell nézni, ezért a nyolcból 6, a 4-ből pedig 3 lett. A másik színt, hogy azt is én határozzam meg, ugyanazzal a képlettel, de ellentétes relációval, plusz mellé egy egyenlőség jellel oldottam meg.
=MARADÉK(T23;6)>=3 ez lett az egyik szín
=MARADÉK(T23;6)<3 ez lett a másik színSzuperül működik, köszönöm még egyszer
May The Force Be With You!
-
félisten
A képeden annyi "hiba" van, hogy ha az A1 cellát elnevezted aosz tartománynak, akkor az az F7 cellában nem 33-nak kellene lennie, hanem valami-nek
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Biztosan nem így van (max így gondolod, hogy kellene lennie) mert a makród MsgBox Range("aosz").Address egyértelműen az A1 cella címét adja meg, mint aosz néven elnevezett tartomány címét. Szóval ebből kell kiindulni.
Ehhez ellenőrizd a tartományokat és elnevezésüket, Képletek/Névkezelő segítségével. 1 tartományt ha többször próbáltál más névvel ellátni(lehet, csak figyelmetlenségből stb), akkor 1 tartományhoz több cím is tartozik és mindig a legutolsó az érvényes(bizonyos műveleteknél), pl legyártottam most direkt egy hibás megközelítés: [link]. Értelem szerűen csak 1 elnevezése lehet 1 tartománynak egyébként keveredés lesz. (Lehet 1 tartománynak több neve is, csak akkor a programozónak szándékosan kell ezt kiviteleznie, és tudnia, hogy ő maga hozott létre több nevet 1 tartományhoz)[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
Ez egy teljesen új kép... Annak jobban örültem volna, ha a korábbi állapotban(amiről a korábbi képet beraktad) készült névjegyzéket láttam volna, mert itt az újnál már aosz sincs stb...
Maradva akkor ennél az új állapotnál, ha elmented a táblázatot, majd (biztos, ami biztos) nyomsz egy F9-t, azt követően a makró nem írhatja ki az $A$1-t, hanem az $A$7-t, mint a proba tartomány címét.
(Amúgy itt már helyes a címzés, mert az F7 cellában valóban a próba tartomány (ami az A7) értéke jelenik meg, nem mint korábban)Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Fferi50
őstag
Szia!
A "relatív" névadás szerintem roppant mód veszélyes dolog - legalábbis a 2010-es excelben biztosan, 2003-as excelben pedig egész egyszerűen körkörös hivatkozást "képes" eredményezni.
Gondolj bele: a relatív hivatkozással "elhúzod" az alapcella címét is, amikor egy új cellába helyezed a képletet (ugyanúgy, mint más képletttel), csak itt "megy vele" a viszonyítási alap is. Erre aztán "el is veszti" a fejét a VBA.
Hogy ez aztán "bug", vagy csak "elfelejtették" megírni, hogy ne adjunk nevet relatív címzéssel azt nem tudom.
Szerintem nem véletlen, hogy a névkezelő állandóan abszolut módon adja meg a címeket.Üdv.
-
Fferi50
őstag
Szia!
Neked bizonyára sokkal nagyobb gyakorlatod van a relatív meghatározású nevek használatával, mint nekem, mivelhogy én nem használok ilyeneket. A kérdésed kapcsán próbáltam megnézni a viselkedésüket, illetve visszaemlékeztem pár hasonló próbálkozásomra (de bizonyára rosszul fogtam meg a témát).
Hogy a kérdésedre válaszoljak:
Alapcella - amin álltál, amikor a névkezelőben megadod a nevet. Ehhez a cellához képest a névhez tartozó tartomány (ami lehet egy-vagy több cella) sor és oszlop eltérése a viszonyítási alap a szóhasználatomban.
Tehát, ha a C1-ben állva adsz az A1 cellának nevet (név), majd F1-ben beírod a képletet =név, abban pillanatban a név már nem az A1 cellára fog vonatkozni, hanem az F1-től 2 cellával jobbra levő D1 cellára.
Ha pedig beleállsz az E1 cellába és megnézed a név melyik cellára mutat, meglátod, hogy az - mielőtt bármit is csinálnál vele C1-re hivatkozik.
DE: a VBA már meg is "bolondult", mert nála már az utolsó oszlopok valamelyike az, amihez a név tartozik.
És itt jön be, amit a 24292-ben írt Fire/SOUL/CD : a relatív névből látszólag mindig egy van, a valóságban pedig mindig a legutolsó aktív cellához képest számolja ki a név hivatkozását, tehát "több" név létezik belőle. Ezért nem egyértelmű - pont a dinamizmusa miatt. Szerintem a VBA ezért nem tud vele igazán mit kezdeni.Ez igaznak látszik a munkalapon generált relatív nevekre. Nem tudom - most nincs már igazán időm rá -, hogy a VBA-ban makróval megadott nevek hogyan viselkednek.
Emiatt az általam korábban már megtapasztalt ellentmondás miatt inkább a VBA objektum hozzárendelést és ahhoz az offset tulajdonságot használom. Pl.
dim alap as range
set alap=range("A1")
msgbox alap.offset(0,2).address ' = $C$1De persze - mint az már többszörösen bebizonyosodott, ízlések és pofonok különböznek. Így aztán nyilván különféle megoldásai lehetnek ugyanazon feladatoknak.
Üdv.
-
slashing
senior tag
Nem te vagy az első aki ilyet akar ahogy nézem, elég sok komment van talán van is rá valami értelmes megoldás nem néztem át őket mert elég sokat írnak
-
Fferi50
őstag
Szia!
Kicsit favágós, de működik ("kézi hajtással"):
A feltételes formázás szabálya: a formázandó cellák kijelölése képlettel
A képlet: =SZÖVEG.KERES(szinescellák;A1)>0
Beállítod azt a szint kitöltésnek amit szeretnél.
A szinescellák tartalma kétféle módon adható meg:
A szinezendő cellákról csinálsz egy másolatot. Utána a másolaton adatok-ismétlődések eltávolítása.
Ezzel megvannak az egyedi értékeid, abban a sorrendben, ahogyan az eredeti helyen következtek.
Minden második értéket "kigyomlálod" - vagy összefűzöd egy cellába vesszővel elválasztva.
1.Ekkor a szinescellák helyén ez a cella szerepel, abszolút módon megcímezve.
=SZÖVEG.KERES($K$1;A1)>0
2.Ha nem akarod, hogy a cella ott maradjon, akkor az értékét teszed be a szinescellák helyére.
=SZÖVEG.KERES("Németország,Olaszország,Portugália";A1)>0
A képlet megadásánál kijelölöd az egész formázandó tartományt. Az A1 helyébe a formázandó tartomány első celláját írod, nem $ cimként.Ha bővülne a tartomány, akkor a cellát, vagy a szöveget csak kiegészíted az új értékkel, amit másként kell színezni.
Ennél jobb most nem jutott eszembe.
Üdv.
[ Szerkesztve ]
-
Mutt
aktív tag
Hello,
B-oszlop egy segédoszlop, amiben a képlet ez:
=HA(DARABTELI($A$2:A2;A2)=1;HOL.VAN(A2;A:A;0);"")Ez a képlet megmondja, hogy hol fordul elő legelősször a mellette lévő cella. Ha többször fordul elő, akkor ismétléseknél üres cellát ad és csak a legelső találatnál a megfelelő sort.
Ezen segédoszlop segítségével a feltételes formázás képlete.
=PÁRATLANE(HA(B2="";D1*1;DARABTELI(B:B;"<="&B2)))Az a képlet a segédoszlopban taláható számokból (2;3;4;7;9 stb. a mintán) egy sorszámot állít elő (1,2,3 stb) és a páratlanokat kiválogatja amelyeket már ki tudunk szinezni,
üdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
Új hozzászólás Aktív témák
- Steam, Windows, Origin kulcsok, előfizetések közvetlenül a kiadótól, a LEGJOBB ÁRON!
- Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Vírusirtó, Antivirus VPN kulcsok
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.