Hogyan tudok "makrót" duplikálni?
az alább látható makró arra való, hogy az első munkalapba írt adatokat bemásolja a második munkalap bizonyos helyeire, hogy nyomtatható legyen egy előre megcsinált formanyomtatványra.Szeretném, ha ez a "másoló makró" ugyan ezeket az adatokat egy második munkalapba is betenné, hogy egy másik tipusú nyomtatót is tudjak használni.Hogyan tudom megcsinálni? segítségeteket előre is köszönöm!
Sub másol()
Dim WS2 As Worksheet
Dim usor As Integer
Set WS2 = Sheets("Szerződés")
usor = Cells(Rows.Count, "A").End(xlUp).Row
WS2.[J21] = Range("B" & usor)
WS2.[O24] = Range("C" & usor)
WS2.[K30] = Range("D" & usor)
WS2.[P30] = Range("E" & usor)
WS2.[AH30] = Range("F" & usor)
WS2.[P31] = Range("G" & usor)
WS2.[U31] = Range("H" & usor)
WS2.[AK31] = Range("I" & usor)
WS2.[P26] = Range("J" & usor)
WS2.[AP26] = Range("K" & usor)
WS2.[N28] = Range("L" & usor)
WS2.[P34] = Range("M" & usor)
WS2.[AN34] = Range("N" & usor)
WS2.[O36] = Range("O" & usor)
WS2.[M37] = Range("P" & usor)
WS2.[AI57] = Range("Q" & usor)
WS2.[AB59] = Range("S" & usor)
WS2.[S65] = Range("T" & usor)
WS2.[T67] = Range("U" & usor)
WS2.[BE6] = Range("V" & usor)
WS2.[AY10] = Range("W" & usor)
WS2.[AS51] = Range("W" & usor)
WS2.[BA13] = Range("X" & usor)
End Sub
Szia.
Felveszel egy új worksheet változót, értéket adsz neki és oda másolod az értékeket, illetve beszúrsz egy új fület és megcsinálod a formázást az új munkafüzet fülön a printerre és megnézed, hogy jó lesz-e.
Tehát :
Dim WS3 As Worksheet
.
.
.
Set WS3 = Sheets("Nyomtatás2")
.
.
.
WS3.[J21] = Range("B" & usor)
WS3.[O24] = Range("C" & usor)
WS3.[K30] = Range("D" & usor)
WS3.[P30] = Range("E" & usor)
.
.
.
.
Sok sikert.
Üdv.
Nagyon köszönöm a gyorsz választ, megpróbáltam megcsinálni, de ajnos nem megy... valószínű hogy nem úgy csináltam ahogy kell :(
hozzátenném, nem értek hozzá egyáltalán! Az informatikusunk lelépett, telefont sem veszi fel, én meg itt szerencsétlenkedek vele.
Néhány fogalommal nem vagyok tisztában. pl "változót" hogy veszek fel?
tudom ez nem egy tanfolyam, de le tudnád írni lépésről-lépésre?
Szia.
Próbáld meg a PDF nyomtatót mint közvetitő közeget. (Mivel a PDF minden nyomtatón ugyanúgy néz ki.
Ehhez nyommtató : bullzip vagy dopdf (googléban megtalálod őket ingyenesek), telepited a nyomtatók között megjelenik egy pdf nyomtató, amit erre a pdf nyomtatóra nyomtatsz ki abból létrejön egy pdf fájl amit elvileg bármely printerre ki tudsz nyomtatni).
OKÉ akkor nézzük az egész makrót, ha a harmadik fülön is ugyanoda kell másolni az adatokat és a harmadik fül neve "Nyomtatás2" akkor :
Sub másol()
Dim WS2 As Worksheet
Dim WS3 As Worksheet
Dim usor As Integer
Set WS2 = Sheets("Szerződés")
Set WS3 = Sheets("Nyomtatás2")
usor = Cells(Rows.Count, "A").End(xlUp).Row
WS2.[J21] = Range("B" & usor)
WS3.[J21] = Range("B" & usor)
WS2.[O24] = Range("C" & usor)
WS3.[O24] = Range("C" & usor)
WS2.[K30] = Range("D" & usor)
WS3.[K30] = Range("D" & usor)
WS2.[P30] = Range("E" & usor)
WS3.[P30] = Range("E" & usor)
WS2.[AH30] = Range("F" & usor)
WS3.[AH30] = Range("F" & usor)
WS2.[P31] = Range("G" & usor)
WS3.[P31] = Range("G" & usor)
WS2.[U31] = Range("H" & usor)
WS3.[U31] = Range("H" & usor)
WS2.[AK31] = Range("I" & usor)
WS3.[AK31] = Range("I" & usor)
WS2.[P26] = Range("J" & usor)
WS3.[P26] = Range("J" & usor)
WS2.[AP26] = Range("K" & usor)
WS3.[AP26] = Range("K" & usor)
WS2.[N28] = Range("L" & usor)
WS3.[N28] = Range("L" & usor)
WS2.[P34] = Range("M" & usor)
WS3.[P34] = Range("M" & usor)
WS2.[AN34] = Range("N" & usor)
WS2.[AN34] = Range("N" & usor)
WS2.[O36] = Range("O" & usor)
WS3.[O36] = Range("O" & usor)
WS2.[M37] = Range("P" & usor)
WS3.[M37] = Range("P" & usor)
WS2.[AI57] = Range("Q" & usor)
WS3.[AI57] = Range("Q" & usor)
WS2.[AB59] = Range("S" & usor)
WS3.[AB59] = Range("S" & usor)
WS2.[S65] = Range("T" & usor)
WS3.[S65] = Range("T" & usor)
WS2.[T67] = Range("U" & usor)
WS3.[T67] = Range("U" & usor)
WS2.[BE6] = Range("V" & usor)
WS3.[BE6] = Range("V" & usor)
WS2.[AY10] = Range("W" & usor)
WS3.[AY10] = Range("W" & usor)
WS2.[AS51] = Range("W" & usor)
WS3.[AS51] = Range("W" & usor)
WS2.[BA13] = Range("X" & usor)
WS3.[BA13] = Range("X" & usor)
End Sub
Változó felvétele általában dim utasitással történik ahol megadod a változó nevét illetve tipusát is pl. Dim szoveg as String vagy dim betu as char
A szöveg változóba szöveget tehetsz a betu változóba padiglen csak egy karaktert (egy betüt)
Itt egy kis olvasnivaló az egészről : [link]
Sok sikert.
Üdv.
nagyon köszönnöm! Működik!
Szép napot!
szia, remélem olvasod :)
nos, még egyszer köszönöm a segítséget, azóta is tökéletesen működik a dolog...
volna még egy dolog. ebben a táblázatban olyan dolgokat rögzítünk, amik nagyon fontosak és ha eltűnik belőle egy sor, akkor azok az adatok sehol másutt nem jelentkeznek... ez azért probléma, mert felmerült hogy a lányok sikkasztanak :( remélem nem így van, de jó lenne, ha biztosan tudnám mi a helyzet.
a kérdés az, hogy ebbe a másolós makróba, lehet-e olyan "parancsot" adni, hogy ha megnyomja a másoló gombot, akkor a másoláson kívül, az adatokat elmentse egy másik fájlba is. akár egy jegyzettömbbe akár egy másik excell fájlba. természetesen az is fontos lenne, hogy erről ne szerezzenek tudomást a táblázat használói...
előre is köszönöm
Szia.
Elvileg lehet a macróban is, de szerintem érdemesebb külön makróba tenni, vannak az excelben eseményhez kötött makrók.
Ilyen például az AutoOpen makró, ami egy excel fájl megnyitáskor hajtódik végre. Ilyenkor ha lemented a megnyitott fájt akkor kapsz egy módositás előtti állapotot. A mentésnél érdemes fájlnévnek dátum és időd megadni, igy beazonositható a dolog. Igy nem egy fájlod lesz, hanem annyi ahányszor megnyitják a fájlt.
A macrót gondolom meg kellene irni, rendben megirom, de ahhoz kell egy kis idő.
Üdv.
előre is nagyon köszönöm a segítséged és ha megírod a makrót akkor nagyon hálás leszek.
viszont nem teljesen értettem a dolgot.
tehát ha megnyitom azt a fájlt amibe beírom az adatokat és másolom a "nyomtatós" munkalapokra, akkor elindul automatikusan egy másik makró is, ami egy külön fájlba menti a beírt adatokat?
ez akkor is jó ha a lányok reggel megnyitják a munkafüzetet (műszak végéig be sem zárják) és mondjuk beirják az adatokat a sorba, rányomnak a másolás makróra, kinyomtatják az átvételit és utána rögtön kitörlik a frissen felvitt sort? közben nincs mentés...
Szia.
Hát igy ahogy leirtad, igy már nem igazán működik a dolog, de modjuk azt is meg lehetne oldani, (mivel van az excelnek munkafüzet változásra is eseményes makrója).
Mindegy nem érdekes. Akkor rakd a makró részletet a másolási makróba és kész is a dolog.
Itt van, nem lett bonyolult, ezeket a sorokat kell akkor a másoláli makróba berakni (pl. az End Sub elé, a makró végére, gondolom úgy is kipróbálod az éles bevetés előtt. ):
Utvonal = "C:\Backup\"
TeljesFileNev = ThisWorkbook.FullName
UjFileNev = Utvonal + Format(Now, "yyyymmdd_hhmmss") + ".bck"
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ActiveWorkbook.SaveAs Filename:=UjFileNev
ActiveWorkbook.SaveAs Filename:=TeljesFileNev
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Az "Utvonal" változót át kell irni, hogy hova mentse a fájlokat (Letező utvonalnak kell lennie, ha az utvonal nem létezik "Run Time Error 1004"-es hibával fog megállni a másolási makró).
Az "UjFileNev" változó kiterjesztését megváltoztattam ".bck"-ra (de bármi irható kiterjesztésnek) igy nem jelzi semmi sem, hogy mi van a fájlban, és excellel meg lehet nyittatni (Bár akkor a megnyitott fájl bekerül a excel "Legutóbbi" munkafüzetei közé és az már egy kicsit gyanús)
Fájlnévnek a "now" változót használom (pillanatnyi datum+idő) ás a saját szám ize szerint formáztam : yyyymmdd_hhmmss (elvileg 20130724_212737.bck formátumú fájlokat fog generálni, a számitógép dátum és idejével)
Mentés előtt ki kell kapcsolni az excel üzeneteit,hogy ne kérdezze meg, hogy felülirod-e a fájlt.
Ezt az a két sor végzi :
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Sajnos két mentést kellet elvégezni. mivel a mentés másként megváltoztatja a fájl nevét.
Ezért először elnmenti a fájlt az új névvel, aztán elmenti a fájlt a régi névvel újra.
Ha nagy a fájl akkor ebből lehet probléma, mivel ezt az "időveszteséget" észrevehetik a kezelők. (Mond nekik, hogy másoláskor menti is a munkafüzetet a gép, biztonsági mentés)
Ha hiba történik a két mentés során, akkor mivel ki vannak kapcsolva az excel üzenetei, csak úgy lehet a gondot orvosolni, ha az excelt összezárjuk és ujra elinditjuk.
A mentések végeztével visszaállitjuk az excel üzeneteit.
Ennyi.
Sok sikert.
Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!