Keresés

Részletes keresés

tanulok Creative Commons License 2014.03.19 0 0 12

Szia!

Érthetőnek tűnik, de ma már nincs időm kipróbálni. Holnap megnézem, lehet hogy ez a változat az igazi.

Üdv

Fferi50 Creative Commons License 2014.03.19 0 0 11

Szia!

 

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á.

 

Remélem érthető.

 

Üdv.

 

Előzmény: tanulok (10)
tanulok Creative Commons License 2014.03.19 0 0 10

Sziasztok!

 

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).

Üdv

tanulok Creative Commons License 2014.03.19 0 0 9

Sziasztok!

 

Sub megnyit()

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

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

Windows("kisérletek5.xls").Activate

’itt a probléma, mert ez is a fent említtett „AH11” – ben megjelenő munkafüzetnév kellene, hogy legyen!

Sheets("sablon").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

   A jelenlegi helyzetben csak a megnevezett munkafüzet sablon nevű munkalapjára tudja beilleszteni az adatokat.

   Amikor egy másik név kerül kiválasztásra az AH10-ben (itt egyébként egy összefüz képlet van, mert a név elé meg kellett adni az elérési útvonalat is).

   Üdv

 

Fferi50 Creative Commons License 2014.03.18 0 0 8

Szia!

 

Ez alapján:

"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 annak a munkafüzetnek a nevét, ahová az adatokat írni kell, ismered. Akkor a következőképpen tudod áttenni az adatokat:

 

Workbooks("célmunkafüzet").sheets("célmunkalap").range("cél").value = Workbooks("forrásmunkafüzet").sheets("forrásmunkalap").range("forrás").value

Ez csak a forrás cella értékét másolja át.

 

Vagy: Workbooks("forrásmunkafüzet").sheets("forrásmunkalap").range("forrás").copy Workbooks("célmunkafüzet").sheets("célmunnkalap").range("cél")

Ez utóbbi a forrás formázását és a képletet is átmásolja, ha van képlet.

 

A célmunkafüzet nevét az adott cellából pl. így olvashatod ki  Range("A1").value, de ha már megnyitottad akkor nyilván tudod a nevét.

 

Üdv.

Ps. Ha az átmásoló kódból egy mintát feltennél, akkor tudnánk abban is segíteni.

Előzmény: tanulok (6)
Törölt nick Creative Commons License 2014.03.18 0 0 7

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).

Előzmény: tanulok (6)
tanulok Creative Commons License 2014.03.18 0 0 6

Sziasztok!

 

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.

Üdv

 

Fferi50 Creative Commons License 2014.03.18 0 0 5

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.

 

 

Előzmény: tbando (4)
tbando Creative Commons License 2014.03.18 0 0 4

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?

Előzmény: Fferi50 (3)
Fferi50 Creative Commons License 2014.03.18 0 0 3

Szia!

 

" 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."

 

Tudod konkrétan annak a cellának a címét, ahol megjelenik a név, vagy "találgatni" kell?

 

Üdv.

Előzmény: tanulok (2)
tanulok Creative Commons License 2014.03.18 0 0 2

Sziasztok!

 

Tehát a probléma a következő:

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?

Törölt nick Creative Commons License 2014.03.17 0 0 1

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.

Előzmény: tanulok (-)
Törölt nick Creative Commons License 2014.03.17 0 0 0

Biztosan létezik megoldás. Csak nevezzük nevükön dolgokat.

- Az "Excel" az alkalmazás neve.

- Az Excel dokumentumot úgy hívják: "munkafüzet".

- A munkafüzeten belül a füleket úgy hívják: "munkalapok".

- A munkalapon egy összefüggő cellatartományt nevezhetünk "táblázatnak" vagy "táblának".

 

Na, most ilyen paraméterekkel fogalmazd meg újra a kérdést.

Egyébként javaslom ezt a fórumot:

http://forum.index.hu/Article/showArticle?t=9009340

 

ahol mindenféle Excel kérdés felmerül, és általában válasz is jön rá nagyon hamar. Ha gondolod, az újraírt kérdést már akár oda is posztolhatod.

 

 

 

Előzmény: tanulok (-)
tanulok Creative Commons License 2014.03.17 0 0 topiknyitó

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?

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!