A ciklusok miatt elég bonyolultnak tűnik, sokkal egyszerűbben is megoldhatod:
Sub megnyit()
dim elokeszitett as worksheet Workbooks("kisérletek2.xls").Activate
set elokeszitett=activeworkbook.sheets("előkészített") 'egy változóba eltároljuk a forrásadatot tartalmazó munkalapot
Workbooks.Open Filename:=elokeszitett.Range("AH10").Value 'itt megnyitja a cél munkafüzetet Sheets.Add Type:="C:UsersÉnAppDataRoamingMicrosoftTemplatesszamla.xlt" 'beszúr egy sablon munkalapot, utánna pedig beírja a kigyűjtött adatokat 'Sheets("számla").Select -- erre nincs szükség, a következő sor akkor is beirja az értékeket, ha nem aktív az adott munkalap, de a beszúrás után a beszúrt munkalap lesz az aktív munkalap.
sheets("számla").range("A21:O30").value=elokeszitett.range("A21:O30").value 'az egész területet egy lépésben tudod áttenni
end sub
Ez akkor működik, ha mindig ugyanazt a területet másolod.
A szűrővel szűrt területről is tudsz másolni, nem kell külön eltenni egy másik munkalapra, persze akkor más kód is kell hozzá.
Időközben átvariáltam a sorrendet és most úgy tűnik, hogy jó. Ime a kód:
Sub megnyit() Windows("kisérletek2.xls").Activate 'az adatokat beolvassa innen Sheets("előkészített").Select Dim ertek(0 To 14, 21 To 30) oszlop = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o") For ciklusa = 0 To 14 For ciklusb = 21 To 30 Cella = oszlop(ciklusa) & ciklusb ertek(ciklusa, ciklusb) = Range(Cella) Next ciklusb Next ciklusa Workbooks.Open Filename:=ActiveWorkbook.Sheets("előkészített").Range("AH10").Value 'itt megnyitja a cél munkafüzetet Sheets.Add Type:="C:UsersÉnAppDataRoamingMicrosoftTemplatesszamla.xlt" 'beszúr egy sablon munkalapot, utánna pedig beírja a kigyűjtött adatokat Sheets("számla").Select For ciklusa = 0 To 14 For ciklusb = 21 To 30 sor = ciklusb Cella = oszlop(ciklusa) & sor Range(Cella) = ertek(ciklusa, ciklusb) Next ciklusb Next ciklusa End Sub
Ha esetleg van javítani való, szívesen fogadom az ötleteket, mert én még csak tanulmányozgatom a különféle megoldásokat, így azután az is lehet, hogy nem a leglogikusabb megoldásokat alkalmazom. Kérem a hozzászólókat, hogy ennek figyelembe vételével írják a kommentjeiket (magyarán, hogy magamfajta mezei felhasználó is megértse).
Még mindig nagyon sok a nyitott kérdés. De azért megpróbálok egy általános valamit összehozni.
Tegyük fel, hogy a cella, amiben az ActiveX combobox tartalma megjelenik, az "A1"
Ha jól értem, akkor itt egy személynév jelenik meg, pl. Gipsz Jakab. Adott még egy "Gipsz Jakab.xls" vagy "Gipsz Jakab.xlsx" munkafüzet, ami ebben a pillanatban nyitva van, és tegyük fel, hogy ennek a munkafüzetnek a Munka1 nevű munkalapjára kell az adatokat írni. Ha ennek a munkalapnak a C2 cellájába akarok írni, akkor azt így teszem:
Workbooks(Activesheet.Range("A1") & ".xlsx").WorkSheets("Munka1").Range("C2") = érték
Ha ezt fel tudod használni, jó.
Ha nem, akkor légyszi küldd be a kódodat (csak előbb törölj ki belőle minden titkos információt).
Egyrészt, nem a nevet rakja ide-meg oda, hanem a névhez kigyűjtött adatokat.
másrészt a legördülő menü egy Active X vezérlő amelyik mutat egy cellára. A cella mindig ugyanaz. A cella tartalma (kiválasztástól függően) más és más.
Az a cél, hogy abba a munkafüzetbe pakolja át a ciklus az adatokat amelyiknek a neve megeggyezik a cella tartalommal. Ekkor már ez a munkafüzet is meg van nyitva.
Tehát nem munkalapváltásra van szükség (azt meg tudnám oldani), hanem munkafüzetváltásra. Úgy szeretném, hogy ne kellene, minden munkafüzetre külön makrót írni.
Remélem, így már érthetőbb, hogy mit is szeretnék.
Nézd, ebből a leírásból csak találgatni lehet, miket csinál a program. Én is úgy gondolom, hogy az adott névnek egy konkrét, ismert cellában kellene megjelenni, de nem ártana ezt tisztán, világosan látni.
Van olyan, hogy a legördülő lista az egyik nevet ide rakja, a másikat meg oda, a harmadikat meg amoda? Én még ilyennel sosem találkoztam. Az ilyen hogy müködik? És milyen esetekben van értelme?
Egy excel munkafüzetben lévő adatokból a kritériumok beállítása után indított makró kigyűjti az adatokat egy ideiglenes munkalapra. A kritériumok beállítása során egy legördülő menüből az is kiválasztásra kerül, hogy kire vonatkoznak az adatok. Ez meg is jelenik egy cellában.
Minden kiválasztható személyre létezik egy munkafüzet a cellában megjelenővel azonos névvel. Ezt a munkafüzetet megnyitja a makró. Ezután ide beszúr egy új sablon munkalapot és most kellene a ciklusnak elindulni, amelyik kiolvassa az adatokat az ideiglenes munkalapról és beírja erre a sablon munkalapra.
Ezután letörli az ideiglenes munkalapot, hogy oda egy másik személy adatait lehessen kigyűjteni. Akkor majd az ő neve jelenik meg az adott cellában.
A problémám az, hogy ennek a megnyitott munkafüzetnek a neve mindig más és más, ezért a ciklusnak nem tudtam megadni a célt ahova az adatokat írja.
Miként lehetne azt a cellát megadni ahol a név van?
Esetleg azt is megírhatod, hogy milyen módon szeretnéd kijelölni a célterületet. Listából választani interaktívan, vagy van valami szabályszerűség, amiből automatikussá tehető a kiválasztás, stb.
Sziasztok! Szeretnék adatokat átpakolni egyik excelből egy másikba. Ezt egy ciklus tudja is, de csak a makróba beírt nevű táblába pakol át. Ha egy másikat nyitok meg és oda szeretném az adatokat áttenni, akkor át kell írnom a makrót, vagy létezeik erre valamilyen megoldás?