Dobrý den, potřebuji makro, které z uživatelem specifikovane složky načte soubory (.xls) a zkopiruje oblast bunek na list aktivního sesitu. Každy soubor na jeden list. Myslim, že by to mělo byt jednodušši než tohle. Šlo by použit selection.copy?...Diky
Dieesels píše:Dobrý den, jak to upravit (viz.níže), aby se data importovala do aktivního sešitu na určitý list ?
Sub Import() Dim MsgResponse, MsgTit As String Dim ImportFirstFile As Boolean, ImportDir As String, ImportFile As String Dim ZdrojSoubor As Workbook, ZdrojList As Worksheet, ListData As String, ZdrojAdresa As String Dim ZdrojOblast As Range, c As Range Dim CilOblast As Range, i As Integer, j As Integer MsgTit = "Import dat" ImportFirstFile = True ' identifikace prvniho souboru v adresari ImportDir = "E:\excel" ' cesta k souborum ZdrojAdresa = "a1,b2,c3:d4,f5" ' adresy bunek se zdrojovymi daty Set CilOblast = ActiveWorkbook.Worksheets("list1").Range("a1") Application.ScreenUpdating = False j = 0 ' ofset radku na cilovem listu Do If ImportFirstFile Then ImportFile = Dir(ImportDir & "\*.xls") ' prvni soubor v adresari If ImportFile = "" Then _ MsgResponse = MsgBox("Adresáø souborù: '" & ImportDir _ & "' k importu je prázdný!", _ vbOKOnly + vbInformation, MsgTit): Exit Do ImportFirstFile = False Else ImportFile = Dir ' dalsi soubory v adresari End If If ImportFile = "" Then _ MsgResponse = MsgBox("V adresáøi souborù: '" & ImportDir _ & "' k importu nejsou další soubory!", _ vbOKOnly + vbInformation, MsgTit): Exit Do ' MsgBox ImportFile ' pouze pro test ' ListData = "list1" ' algoritmus prirazeni nazvu zdrojoveho listu dle souboru ' Set ZdrojSoubor = Workbooks.Open(ImportDir & "\" & ImportFile) ' otevrit soubor Set ZdrojList = ZdrojSoubor.Worksheets(ListData) Set ZdrojOblast = ZdrojList.Range(ZdrojAdresa) i = 0 ' ofset sloupcu na cilovem listu For Each c In ZdrojOblast.Cells CilOblast.Offset(j, i).Value = c.Value i = i + 1 ' dalsi sloupec na cilovem listu Next c ZdrojSoubor.Close j = j + 1 ' dalsi radek na cilovem listu Loop ' dalsi soubor Application.ScreenUpdating = True End Sub
// Vytvořeno samostatné téma. // Příště to laskavě udělej sám a nevnucuj se do tématu, kde se řešil jiný problém a je již dávno vyřešeno. Díky! // Mike007
to qi0: Kdyz hovoris o zjednoduseni, zrejme mas jasnou predstavu, co lze zjednodusit, takze zjednodus, nic ti v tom nebrani. Pokud vsak pozadujes makro, tak by bylo vhodne upresnit, co ma byt kopirovano: - souvisla oblast nebo jednotlive bunky, z jednoho ci vice listu kazdeho sesitu? - nazvy zdrojovych listu? - jenom hodnoty? - vcetne formatovani? - nazvy cilovych listu? - pokud kopirovat jednotlive bunky, jak je ulozit na cilovy list? ....
Mno tak mě napadá, že by stačilo překopirovat cely list...Názvy zdrojovych listu jsou ve všech sešitech stejné. Názvy cilovych listu změnit třeba na list1, list2...
Vzhledem k neurcitosti odpovedi je v priloze soubor takovy, jaky je. Na listu Start uprav parametry, zavolana procedura zkopiruje ze zdrojovych souboru zadane listy do ciloveho souboru. Pokud budes mit pocit, ze nepotrebujes mit osetreny chybove stavy, muzes si proceduru zjednodusit.
No to je tak nějak ono... diky. Ted se v tom budu chvili vrtat snad se mi to podaří dodelat samotnymu i když pochybuju
Každopádně kdybys měl dlouhou chvili chci se dostat k tomuto: Uživateli se po stisknutí tlačitka zobrazí dialog oteřít... vybere jeden konkretní sešit z něhož se zkopiruje jeden uživatelem zadanej (jmeno listu) list. Dál bud zase jinym tlačitkem nebo automaticky dalsi dialog ve kterym vybere složku, ve který je x sešitů. Z každyho se zkopiruje jeden list (jmeno je pevně dany. je stejny ve vsech sesitech). Detaily: vsechny listy zkopirovat do vychoziho sesitu. tzn ten v kterym je toto makro. Jmena listu: kromě toho prvního pojmenovat podle zdrojových sesitů. Kopirování včetně formatování.
Nedelam to z dlouhe chvile, ale ve snaze pomoci. Oproti puvodnimu dotazu i odpovedi na doplnujici otazky podstatne rozsirujes pozadovane reseni. Az se dopracujes ke konecnemu rozsahu pozadovaneho reseni a nezvladnes reseni vlastnimi silami, nekdo ti zde poradi.
Tak se v tom hrabu zatim to docela jde... Kopirovani listu do vychoziho (tam kde je to makro) sesitu mam reseny takto: ZdrojList.Copy After:=Workbooks("KopirovatListy.xls").Sheets(1)
Nešlo by to vyřešit nějak líp? Pokud nekdo tento sešit přejmenuje tak to nebude fungovat....
Pro tvůj příklad mi funkce dir přijde nepraktické. Vrací string a ne objekt se všemi soubory. Já bych udělal jeden sub z tohoto VBS kodu a do druhého sub bych napsal kod co by otviral soubor po souboru a pracoval s nimi. Jinak variant je vice:
Druhá je přes tyhle objekty VBS: Set objFSO = CreateObject("Scripting.FileSystemObject")
(když dáš toto do googlu najdeš spoustu maker a scriptu a určitě z toho složíš co potřebuješ
' List All the Files in a Folder sub Pro_vsechny_soubory
Dobrý den,
mám ve VBA upravený sešit, který čerpá data z jiných Excelovských sešitů. Po přechodu Excel 21 na Excel 24 přestalo toto spojení přestalo fungovat. Vyskakuje mi hláška : Method updatelink of object _Workbook failed.
Tuší někdo jak do šablon v programu POHODA (které se používají pro tvorbu rozpočtu) zkopírovat data z excelu (viz obrázek).
Jde to nějakým způsobem? Kopírovat to ručně je poněkud zdlouhavé...
Díky.
Poslední příspěvek
Lze to přes import *.xml. Data z Excelu se uloží jako XML. Stormware na to má přesnou strukturu dat, takže je nejlepší se obrátit na firmu a oni ti s tím pomůžou (za peníze). Lze to také velmi snadno automatizovat.
Dobrý den,
potřebuji vytvořit jeden souhrnný vzorec (viz 4) v Excel 2016; kdy budou zohledněny následující podmínky.
Pro jednotlivé kroky jsem si postupně rozepsal vzorce, viz příloha, nedaří se mě je však kombinovat v jeden.
1) Když sloupce B a C...
Poslední příspěvek
Ono se to nezdá, ono to chaotické je:
Ke druhému příkladu vzorec s komentářema:
=ZVOLIT(
POČET(B8:C8) + 1;
; // obě buňky prázdné
x ; // v jedné buňce je číslo
KDYŽ( // 2 čísla
NEBO(
A(
POČET(B8:C8) = 2; // zbytečné, to je tady vždy...
Excel 5000 řádků 2 úzké sloupce a v tisku to je 100 stránek. Potřebuji ty 2 sloupce vytisknou 2x vedle sebe na A4 na výšku, aby to byla polovina listů papíru.
Excel to neumí. Když to tisknu přes pdf a zadám 2 listy na jednu stránku, tak to zase...
Poslední příspěvek
Hoši díky, oba způsoby fungují. :thumbup: :thumbup:
Ty vzorce jsem musel upravit takto (ve sloupci B to zobrazovalo až od řádku 51):
=IFERROR(INDEX(List1!$A:$A; ŘÁDEK() + CELÁ.ČÁST((SLOUPEC()-1)/2) * 100); )
=IFERROR(INDEX(List1!$B:$B; ŘÁDEK() +...