EXCEL - kopirovaci makro se smyckou

Od: Datum: 24.09.12 17:04 odpovědí: 6 změna: 26.09.12 18:03

Dobrý den,

pokousim se vytvorit makro, ktere by automaticky kopirovalo hodnoty do tabulky za sebou..

Range("A8:J58").Select
Application.CutCopyMode = False
Selection.Copy
Windows("IC_tester.xlsx").Activate
Range("C314").Select
ActiveSheet.Paste
ActiveWindow.ScrollRow = 294
ActiveWindow.ScrollRow = 295
ActiveWindow.ScrollRow = 297
ActiveWindow.ScrollRow = 298
ActiveWindow.ScrollRow = 301
ActiveWindow.ScrollRow = 304
ActiveWindow.ScrollRow = 307
ActiveWindow.ScrollRow = 311
ActiveWindow.ScrollRow = 315
ActiveWindow.ScrollRow = 319
ActiveWindow.ScrollRow = 322
ActiveWindow.ScrollRow = 324
ActiveWindow.ScrollRow = 326
ActiveWindow.ScrollRow = 328
ActiveWindow.ScrollRow = 331
ActiveWindow.ScrollRow = 333
ActiveWindow.ScrollRow = 334
Range("C366").Select
ActiveSheet.Paste
ActiveWindow.ScrollRow = 337
ActiveWindow.ScrollRow = 339
ActiveWindow.ScrollRow = 341
ActiveWindow.ScrollRow = 345
ActiveWindow.ScrollRow = 349
ActiveWindow.ScrollRow = 357
ActiveWindow.ScrollRow = 360
ActiveWindow.ScrollRow = 365
ActiveWindow.ScrollRow = 367
ActiveWindow.ScrollRow = 368
ActiveWindow.ScrollRow = 371
ActiveWindow.ScrollRow = 372
ActiveWindow.ScrollRow = 373
ActiveWindow.ScrollRow = 374
ActiveWindow.ScrollRow = 375
ActiveWindow.ScrollRow = 376
ActiveWindow.ScrollRow = 378
ActiveWindow.ScrollRow = 379
ActiveWindow.ScrollRow = 380
ActiveWindow.ScrollRow = 381
ActiveWindow.ScrollRow = 383
ActiveWindow.ScrollRow = 384
ActiveWindow.ScrollRow = 385
ActiveWindow.ScrollRow = 386
Range("C418").Select
ActiveSheet.Paste
jde oznacenou oblast zkopiruju do range C314, pak otevru dalsi soubor ten se automaticky zkopiruje do rande C366 a porad dokola, vzdycky zkopirovat o 52 radku dale po otevreni souboru. vubec nevim, jak takovou smycku vytvorit, strasne by mi pomohlo, abych to zautomatizoval, budu vsem moc vdecny za radu.

avatar
Upozornění
Tato otázka je 4 roky bez odpovědi a proto byla uzavřena.
Máte-li podobnou otázku, a nenašli jste vhodnou odpověď, založte novou otázku.
Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 25.09.12 07:35
 
avatar

Přesnou syntax si už z hlavy moc nepamatuju, ale když to napíšu nějakým pseudokódem, mohlo by to fungovat takhle:

 
Od: kimnator*
Datum: 25.09.12 15:13
 

velice dekuji, pujdu na tom dneska zapracovat, mohl byste mi, prosim, jeste povysvetlit lepe to makro, jsem uplny zacatecnik..

doplněno 25.09.12 15:19:

Mohl byste mi jeste vice makro objasnit? cesta, misto "nastaveni" v promenne slozka je cesta souboru, co se bude kopirovat? tech mam ale 1000, jak to tedy vyresim? nebo je to neco jineho?

Od: kimnator*
Datum: 25.09.12 17:43
 

Nejak mi to neni uplne jasne, byl byste tak laskav a pripsal mi k tomu komentare? musim to do patku rozchodil, protoze v sobotu mame meeting a musime analyzovat testy, ktere jsou na tomhle zavisle. Bez toho makra to budu kopirovat strasne dlouho a to je drina. Budu Vam moc vdecny. Nevim, jak konkretne doplnit range a co konkretne do nastaveni a princip mi neni uplne jasny. Chtel bych klidne postupne otevrit tech 1000 souboru, spustit makro a aby se to zkopirovalo. jak je definovana pozice, tak je tam cislo 1, nema tam byt A1?

Datum: 25.09.12 18:53
 
avatar

No jo, tak to pak ale bude těžký.. :) To je jako by někdo dal mně za úkol postavit barák..

"nastaveni" má být pojmenovaný list, kde v B1 až B4 bude po řadě napsáno: cesta k souborům, písmeno označující poslední sloupec dat v načítaných souborech, počet řádků každého souboru, počet řádků oddělující seskládané skupiny záznamů.

Limit je konečný řádek, po kterém se už nebude kopírovat, protože se to do jednoho sešitu nevejde (mohlo by být 65535 - radky + 1). Na řádek s pořadovým číslem "limit" se ještě kopírovat může.

Pozice je průběžné počítadlo, které jede souborem shora dolů a ukazuje na cílové oblasti. Prostě číslo řádku, kam se vloží obsah dalšího souboru.

Klíčové slovo With vztahuje všechny následující parametry a metody s tečkou na začátku k výrazu nebo objektu, který je za slovem With, takže se nemusí opakovat. To, co tam je, je ekvivalentní s Search.target=, Search.query=,Search.results.. akorát to je kratší.

Pro vyhledání souborů se nastaví target (cíl), query (dotaz, šablona pro hledání shody) a pak se run-em hledání spustí. Správné názvy jsem si samozřejmě nepamatoval, najdete v nápovědě nebo třeba tady: http://vbadud.blogspot.cz/200…en-files-using-excel-vba.html

Výsledky vyhledávání (tj totéž, jako když hledáte ve windows, výsledkem je kolekce souborů v okně, akorát tady ji nevidíte) zpracujete v cyklu. Podmínka If je jen pro ukončení cyklu, aby to nespadlo při dosažení konce výstupního souboru.

No a samotné zpracování udělá to, že otevře soubor (tam asi budou nějaké argumenty, aby to nikdy nemohlo selhat, případně aby se soubor jen přeskočil - a třeba se někam poznamenalo, že nešel otevřít), v něm na prvním listu (číslují se snad od nuly?) označíte oblast A1 až sloupec+řádek, tedy A1:H52, dáte kopírovat. Ve výstupním sešitu (hlavni.xls) použijete Vložit jinak, pouze hodnoty. Tady koukám, že mám chybu, bude muset být workbooks(název).worksheets(název listu).range("A" & pozice).PasteSpecial, aby to vkládalo na správné místo.

Pak zavřete zkopírovaný soubor (opět s ošetřením možných dotazů) a posunete aktuální pozici o počet řádků tak, aby ukazovala na řádek, kam se bude kopírovat další soubor.

(V nastavení hledání byste ještě mohl nechat výsledky seřadit a názvy zpracovávaných si průběžně někam zapisovat, při přerušení byste mohl podle posledního názvu odstranit ze složky tu část, která proběhla, a pak napodruhé dojet jen zbytek.)

 
Datum: 26.09.12 08:04
 
avatar

promiňte, ale na to, že neznáte VBA, se pouštíte hodně vysoko. Můžu vám říct z vlastní zkušenosti, než pochopíte o čem makra jsou, trvá to pár měsíců. Než se je skutečně naučíte psát, trvá to pár let. Makra se nedají tak jednoduše vysvětlit, jak si možná představujete.

Jak jsem vám už povídal ve vaší druhé otázce, naučte se VBA. Jinak z vás bude pouze a jedině alchymista, který neví, co dělá.

Ohodnoceno: 2x
 
Od: kimnator*
Datum: 26.09.12 18:03
 

Děkuji moc za reakce,

máte pravdu - je to složité. Ale já to musím do pátka nějak zvládnout. Dneska jsem vytvořil toto:

Range("A1:J38").Select
Selection.copy
Dim kopiruj_ As Worksheets
Sheets("List1").Select
Range("A1:J38").Select
ActiveSheet.Paste
Dim pocitadlo As Long
pocitadlo = 0
Takze, kdyz otevru soubor, tak se mi zkopiruje, cehoz jsem chtel docilit. Ted bych potreboval poradit s pocitadlem, ktery vynecha 1 radek a vzdy to zkopiruje pod to, zase vynecha atd. dekuji

 

 

 

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.