Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
-
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
-
Fferi50
Topikgazda
Szia!
A konstans definiálásakor nem lehet semmilyen függvényt megadni (sajnos).
Kerülő út: Az immediate lapon megnézed a CHRW függvényed értékét, kimásolod és azt teszed be a VBA -ba. (Bár ez nem biztos, hogy megy.)
Ha nem megy, akkor ne konstansnak definiáld, hanem szövegváltozónak, akkor biztosan "megeszi".
Nálam ez egy kérdőjel, nem tudom, Te milyen karaktert szerettél volna.Üdv.
-
Fferi50
Topikgazda
Szia!
Ha az adatok az A
oszlopban, az 1 az E oszlopban, 2 a H, 3 a K oszlopban, továbbá a fejlécek a második sorban vannak - vagyis az adatok a 3. sortól kezdődnek, akkor a következő képleteket próbáld ki:
E3 cella képlete: =HAHIBA(INDEX(B:B;HAHIBA(HOL.VAN(HAHIBA(KICSI(HA($E$2=$A:$A;SOR($A:$A);"");SOR()-2);1);SOR($A:$A);0);-1);1);"")
Ez lehúzható az E,F,G oszlopban.H3 cella képlete: =HAHIBA(INDEX(B:B;HAHIBA(HOL.VAN(HAHIBA(KICSI(HA($H$2=$A:$A;SOR($A:$A);"");SOR()-2);1);SOR($A:$A);0);-1);1);"")
Amit a H,I,J oszlopban húzhatsz leK3 cella képlete: =HAHIBA(INDEX(B:B;HAHIBA(HOL.VAN(HAHIBA(KICSI(HA($K$2=$A:$A;SOR($A:$A);"");SOR()-2);1);SOR($A:$A);0);-1);1);"")
Ezt a K,L,M oszlopban húzd le.Ezek a képletek tömbképletek, tehát Ctrl+Shift+Enterrel kell befejezni a képlet beírását, nem sima Enterrel.
Ahol már nem talál adatot, oda 0-át fog kiírni. Ha ez zavar, akkor megspékelheted egy HA(képlet=0;"";képlet) kibővítéssel. A képlet helyére az eredeti képletet kell beírni - továbbra is tömbképlet.
Új adat bevitele után egy F9 segít az újraszámolásban.Üdv.
-
Delila_1
veterán
Ezt nem írtad, de hamarosan átírom ennek megfelelően.
Most éhes vagyok.Szerk.: befért az ebéd elé.
Sub Szetdob()
Dim sor As Long, ide As Long, oszlop As Integer
sor = 3
Do While Cells(sor, 1) > ""
oszlop = Cells(sor, 1) * 3 + 2
Cells(2, oszlop) = Cells(sor, 1)
ide = Cells(Rows.Count, oszlop).End(xlUp).Row + 1
Range(Cells(sor, 2), Cells(sor, 4)).Copy Cells(ide, oszlop)
sor = sor + 1
Loop
End SubJó étvágyat!
-
Delila_1
veterán
A Forrásadatok az A2 cellában van (formázással az A2:D2 közepére lehet tenni a vízszintes elrendezés menüpontban).
Sub Szetdob()
Dim sor As Long, ide As Long, oszlop As Integer
sor = 3
Do While Cells(sor, 1) > ""
Select Case Cells(sor, "A")
Case 1
oszlop = 5
Case 2
oszlop = 8
Case 3
oszlop = 11
End Select
ide = Cells(Rows.Count, oszlop).End(xlUp).Row + 1
Range(Cells(sor, 2), Cells(sor, 4)).Copy Cells(ide, oszlop)
sor = sor + 1
Loop
End Sub -
Fferi50
Topikgazda
Szia!
Szerintem ToggleButton a Ribbonra nem tehető ki.
Makrót viszont tehetsz fel a ribbonra és adhatsz hozzá ikont is.
Fájl - beállítások - menüszalag testreszabása - bal oldalon kiválasztod makrók. A jobb oldalon pedig kiválasztod azt a menücsoportot, ahova be szeretnéd tenni.A ribbonra makrón kívüli saját menüpontokat xml fájlon keresztül lehet (Custom UI Editor for Microsoft Office, letölthető MS-éktől).
Ha bővebben leírnád, hogy mit szeretnél, esetleg még többet tudunk segíteni.
Üdv.
-
Fferi50
Topikgazda
Szia!
Nos, azt gondolom, hogy saját magát nem szerencsés meghívni, hanem egy másik eljárást kell hívni, aminek a végére ismét betesszük az időzítés meghívását.
Tehát az üzenetet tedd bele egy külön eljárásba és annak a végén hívd meg az időzítőt újra. Tehát az időzítő eljárásban a másik eljárás neve szerepel, mint meghívó.
Szerintem ez lesz a nyerő.
Bocs, eddig nem figyeltem fel rá, hogy nem két külön eljárást nézek - biztosan a tavaszi fáradtság volt az oka (ez keltette fel a gyanúmat: "Vagy önmagát ne tudná beidőzíteni?")
Nálam mindig külön eljárás az időzítő és az időzített folyamat.
Sőt, a kikapcsolásra, biztos ami biztos alapon van egy harmadik is.(Még egy icipici apróság: a call egyáltalán nem szükséges, ha vba eljárásokat hívsz meg.Help:"You are not required to use the Call keyword when calling a procedure.")
Üdv.
-
Fferi50
Topikgazda
Szia!
Azt gondolom, az a baja, hogy a kovetkezo cella és nem időérték. szerintem úgy kellene meghívni, hogy
Application.Ontime, kovetkezo.value,"frissito_idozito"Ezért(is) szoktam én mindig odaírni a value tulajdonságot is, mert bár igaz, hogy a range alapértelemzett tulajdonsága az érték, de sajnos ezt nem mindig tudja a VBA "értelmezni" - itt pl. egy időértéket vár.
Remélem, ez segít.
De szerintem ezzel együtt ki kellene lépni teljesen az excelből, hogy "elfelejtse" ezt az időzítést.
Üdv.
-
Fferi50
Topikgazda
Szia!
Az előbb rosszul írtam, a frissítési periódust a közössé tétel után kell megadni:
ActiveWorkbook.AutoUpdateFrequency=10
Az ütközés kezelés is változtatható határok között:
Activeworkbook.ConflictResolution=xlUserResolutionA változások megőrzési ideje is változtatható.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ez azt jelenti, hogy van egy időzítésed, ami éles és szeretett volna lefutni - de az a program/munkafüzet már nem aktív, ami elindította, illetve amiben a futtatandó makró lenne. Ezért kell kikapcsolni az időzítést, mielőtt kilépsz a programból. Természetesen lehet globális változóba is tenni az időpont értékét (Public-ként vagy Globál-ként is definiálhatod egy általános modulban). Nálam nem volt probléma a munkafüzetbe irkálás.
A közös használat azért igényel némi óvatosságot.
A közös használatú munkafüzetnek van egy saját frissítési opciója. A korrektúra menü munkafüzet megosztása menüpontban láthatod, hogy beállítható a frissítés és az ütközések kezelése is. Természetesen ez megy makróból is.
Ebben az esetben minden nyitott munkafüzet a megadott periódusonként frissíti és menti magát.
Lehet, hogy Neked ebbe az irányba kellene elindulni?
Közös használatúvá tevés:
If Not ActiveWorkbook.MultiUserEditing Then
ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.FullName, _
accessMode:=xlShared
End If
Előtte még be kell állítani a frissítést és az ütközések kezelését is.Üdv.
-
Fferi50
Topikgazda
Szia!
"Most nézem csak, hogy a frissitőből kihagytad az ön-újraidőzítést, nem?"
De! Nyilván minden lefutáskor újra kell időzíteni.
Az időzítő kikapcsolásra pedig azért van szükség, mert application szinten van bekapcsolva, azaz "emlékszik rá", hogy kellene valamit csinálnia - ezért "panaszkodni fog", vagy egyszerűen "benyalja" a korábbi fájlt és megcsinálja az időzített folyamatot akkor is, ha nem szeretnéd.
Azért fontos, hogy a következő frissítés időpontját eltároljuk, mert pontosan kell rá hivatkozni a kikapcsolásnál. (Nyilván a Now+timevalue(akármi) egy konkrét időpont, de ha nem tudod mi ez az időpont, akkor nem fogod tudni "utolérni" az időzített programot.)
Az éppen abban a pillanatban elindult frissítést viszont már nem tudod kikapcsolni, az le fog futni, csak a későbbi időpontot lehet "törölni".
Üdv.
-
pepenek
csendes tag
Köszönöm a gyors választ. Próbáltam össze & operátorozni, de van olyan html rész, ahol "" jel van, azt nem tudtam megoldani. Viszont tovább ügyködtem a helyettesítő karakter visszacserélésén és az sikerült. Összeszedetem vele a kicserélt idézőjeles html szöveget és a változókat, majd a kész szövegben visszacserélem azokat idézőjelre: =HELYETTE(A1;"KARAKTER(34)";KARAKTER(34)) visszarakta az idézőjeleket.
-
Declare
őstag
Itt van a problema
Viszont megoldast most at kell gondolnom....
A gond, hogy a HA függveny egy Pivot lekerdezesböl szedi az eredmenyt (101). Valamiert a Pivotbol szarmazo eredmenyt viszont " " irja a függveny szerkesztö ablakban is....ezert nem lesz szam nekem a cellaba, ahova beirja....
-
KERO_SAN
aktív tag
Beágyazással csináltam
és amúgy 4 karakterről volt szó, az elején csak beírtam egy random számot .
Kétség kívül, a tiéd egy univerzális megoldás, de magamtól csak eddig jutottam
Csak nézegettem a függvényeket, és a leírások alapján ez megfelelőnek tűnt, és sikerült is.
Viszont legalább megismertem a tiédet is, máskor azt fogom használni
Szép napot.
-
Fferi50
Topikgazda
Szia!
A frissítésre javaslom az application.ontime metódust.
Amikor a munkafüzetet megnyitod lefuttad az "időzítő programot" ami a következő:
Sub idozito()
kovetkezo=now +timeserial(0,10,0)
application.ontime kovetkezo, "frissito"
range("A1").value=kovetkezo 'ezt a cellát választhatod, melyik legyen, ami nem zavar sehol.
end subsub frissito()
[M](C)ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources(/C)[/M]
end sub
Amikor bezár a munkafüzet, akkor ki kell kapcsolni az időzítőt (ezért kell eltárolni a következő frissítés időpontját, mert egyébként nem tudod helyesen meghivatkozni:
Sub idozitoki
kovetkezo=range("A1").value
if timevalue(kovetkezo) >Time then
application.ontime kovetkezo,"frissito",,False 'a False előtt két vessző van.
end if
end subRemélem, segít.
Üdv
-
gdodi
csendes tag
Köszönöm, értem.
Én még csak ott tartok, hogy amit rögzítek, azt próbálom értelmezni. Viszont így sikerült rögzíteni, azért lett ilyen. Rögzíteni viszont csak azt tudtam, hogy kijelölök sorokat, majd másolom, vagy törlöm, itt nekem most az volt a lényeg, hogy nem tudtam megoldani, hogy egy külső változótól függően módosuljon a sorok mennyisége. Ezt formailag meg lehet adni valahogy? Arra gondolok, hogy van egy "s" számú sorom, ami időnként változik, most mindegy miért. Azt szeretném elérni, hogy mondjuk a 10. sortól egy s számú sort másoljak, vagy töröljek, azt meg lehet adni valami olyasmi formátumban, hogy Rows(10:s), vagy ilyen nincs? Persze próbálkoztam, de csak hibaüzenetet kaptam.
Azt is szeretném megkérdezni, hogy van valamilyen letölthető anyag, ami segítene a tanulásban?
Köszi! -
Polllen
félisten
Ettől még text-ként értelmezi sajnos.
Ha visszaolvasol én pl. ilyeneket használok:
"=VLOOKUP(RC[-9],'" & utvonal & "[" & valtozo & "]Shortage'!C1:C10,10,0)"Tökéletesen működik, ha general a cellaformátum. Lehet érdemes akkor még kipróbálni a HA helyett IF-t, ahogy előttem javasolták.
-
Fferi50
Topikgazda
Szia!
Ezt a sort így :=HA(valami = 0;"nincs kitöltve";valami) a VBA és az excel szövegként értelmezi.
Ha így szeretnéd beírni, akkor a formulalocal tulajdonságot kell használnod - de ez nagyon "röghözköti" a programot.
VBA-ban az international - azaz angol - függvény megnevezéseket célszerű használni, tehát
amit.formula="=IF(valami = 0;"nincs kitöltve";valami)"Üdv.
-
Fferi50
Topikgazda
Szia!
Azért mégis próbáld meg a beillesztéses verziót a következőképpen:
kitoltendo.Select
ActiveSheet.Paste link:=True
Ennek így működnie kell.Az én verzióm ilyen esetekre akkor működik, ha a forrás cellák és a cél cellák címei megegyeznek a két munkalapon (azaz pl A1:H1 mindkét lapon).
Ha ez nem így van, akkor a következőt javaslom:kitoltendo.cells(1,1).formula="=" & dstbook.WorkSheets(1).range("KELL").cells(1,1)address(external:=true,rowabsolute:=false,columnabsolute:=false)
kitoltendo.formula=kitoltendo.cells(1,1).formulaEz azért jobb szerintem, mint a copy mert nem használja a vágólapot.
Üdv.
-
Fferi50
Topikgazda
Szia!
Ebben az esetben próbáld az adott cella formula tulajdonságát beállítani, azaz a képletet beírni a cellába, valahogy így:
srcbook.kitoltendo.formula="=" & dstbook.Worksheets(1).Range("KELL").Address(external:=true)
Az address tulajdonság external kapcsolója arra utasítja az excelt, hogy az adott cella teljes elérési útvonalát is tartalmazó címét adja meg - a hivatkozáshoz neked pont erre van szükséged.
Üdv.
-
slashing
senior tag
Ha még nem illesztetted be őket akkor érdemes lehet sokat tud gyorsítani rajta, csak a végén ne felejtsd el visszakapcsolni.. A tonnányi képlet kiszámolás tuti sokat számít arra mindenképpen érdemes berakni az első kapcsolót.
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.Enableevents=false -
m.zmrzlina
senior tag
Én a
Set valami = ThisWorkbook.Worksheets("valami")
megoldást szoktam használni és eddig még jól működött.
Egy időben a makrós munkafüzet nevét adtam meg itt de arról hamar leszoktam mert kb abban a pillanatban halt meg a makró ahogy átnevezték a fájlt. És mindig átnevezték.
-
Mutt
senior 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
-
Fferi50
Topikgazda
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.
-
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
Topikgazda
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.
-
Fferi50
Topikgazda
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.
-
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) -
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) -
-
LordVader80
őstag
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
-
LordVader80
őstag
öÖö 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. -
Delila_1
veterán
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.
-
Fferi50
Topikgazda
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.
-
Fferi50
Topikgazda
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
Topikgazda
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.
-
Delila_1
veterán
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é?
-
Fferi50
Topikgazda
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
veterán
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".
-
Delila_1
veterán
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.
-
Fferi50
Topikgazda
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.
-
Fferi50
Topikgazda
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
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.
-
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
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 -
Fferi50
Topikgazda
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.
-
Fferi50
Topikgazda
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.
Új hozzászólás Aktív témák
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Microsoft Windows, Office & Vírusirtók: Akciók, Azonnali Szállítás, Garantált Minőség, Garancia!
- Több mint 70.000 eladott szoftverlicenc
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- LicencAruhaz.hu OLCSÓ, LEGÁLIS SZOFTVEREK AZONNAL - Windows - Office - Win Server - ÖRÖK GARANCIÁVAL
- LG UltraGear Gaming Monitorok -30%
- AKCIÓ! MSI B365M i5 8600 16GB DDR4 512GB SSD RX 5700XT 8GB CM MASTERBOX Q300L Zalman 600W
- Azonnali készpénzes GAMER / üzleti notebook felvásárlás személyesen / csomagküldéssel korrekt áron
- GÉMER! Dell G15 5520 i7-12700H 14magos! RTX 3060 3070 szint! 32GB RAM 1000GB SSD FHD 120Hz Gar. 2026
- MacBook Pro 13, 14, 15, 16, MacBook Air M1, M2 M3 M4 bill magyarosítás lézerrel / sapkacserével
Állásajánlatok
Cég: FOTC
Város: Budapest