Stránka 1 z 2

kopie listu z jiného sešitu makrem

Napsal: 13 říj 2014 14:16
od revol
Zdravím, všude, kde jsem hledal jsem našel kopírování aktivního listu, ale co když potřebuji zkopírovat list ze zavřeného sešitu v úplně jiném úložišti?

Poradil by mi někdo jak do otevřeného sešitu (za list "5") zkopírovat list ze sešitu "C:/file/zkouška.xlsx" s tím, že by to měl být list, který se jmenuje stejně jako text v buňce A1 listu "Data" daného otevřeného sešitu. Název zkopírovaného listu by měl zůstat stejný. Budu moc rád za radu, děkuju

Re: kopie listu z jiného sešitu makrem

Napsal: 14 říj 2014 16:37
od guest
Od boku:

a) Vzorce provázané z naformátovaných buněk do zdroje dat
b) Pokud mají data databázové uspořádání (seznam), pak dotaz přes MS Query
c) Makra (GetObject a zkopírování, databázově - ADO, ACE, ExecuteExcel4macro - zde asi nevhodné)

Re: kopie listu z jiného sešitu makrem

Napsal: 16 říj 2014 13:03
od revol
a) se mi nechce dělat, složité
b) nemají
c) pomocí makra to chci řešit, ale neumím napsat správný kod.

Jak jsem psal, všude jsem našel kopii aktivního listu, nikoli listu z jiného souboru. Mám část (malou část) kodu, ale ve VBA začínám a nikde jsem nedohledal, jak přesně to má být.

Sub kopie()
GetObject("C:\file\zkouška.xlsx") - nevím jak mu říct, který list to vlastně chci
- příkaz na jeho zkopírování také nevím
after:=ActiveWorkbook.Sheets("5")
End sub

Budu rád, když mě někdo nakopne jak dál.

Re: kopie listu z jiného sešitu makrem

Napsal: 20 říj 2014 14:21
od guest
a) Složité? Jeden vzorec rozkopírovat a nahradit vzorce hodnotami? Maximálně 10 sekund.
b) OK
c) Přes GetObject obdržíte co? Sešit. Neumíte se odkázat na jeho druhý list? Máte nastudovaný model Excelu? A GetOject používáme proto, že s pomocí Set si ho přiřadíme do objektové proměnné. Do objektové proměnné si přiřaďte i cíl (namísto používání ActiveWorkbook).

Až přestanete tvrdit, že je něco složité a "nechce se mi", tak se mě možná bude chtít uvést příklad. Zatím v tom vidím jen lenost.

Re: kopie listu z jiného sešitu makrem

Napsal: 20 říj 2014 15:45
od revol
a) ano (sloučené buňky, formátování, různý počet sloupců a řádků v čase)- daný list nevytvářím já, jen ho potřebuju dostat do svého reportu
c) jsem samouk a ve volných chvílí se snažím aspon něco naučit. Asi model Excelu nastudovaný nemám, ale rád to doženu. Nechci abyste mi napsal celý kod, jsem rád, že se mým problémem zdržujete a rád kod vytvořím sám. Jen nápovědy musí být pro BFÚ...

Re: kopie listu z jiného sešitu makrem

Napsal: 20 říj 2014 16:45
od guest
Dobrá, trochu od boku, snad to půjde:

Kód: Vybrat vše

Sub KopieListu()

    Dim wkbZdroj As Workbook
    Dim wkbCil As Workbook

    Dim wshZdroj As Worksheet

    Set wkbCil = ThisWorkbook

    Set wkbZdroj = GetObject(ThisWorkbook.Path & "\" & "zdroj.xlsx")
    Set wshZdroj = wkbZdroj.Worksheets("List2")

    wshZdroj.Copy After:=wkbCil.Worksheets("List3")
   
    Set wshZdroj = Nothing
    Set wkbZdroj = Nothing

End Sub

Re: kopie listu z jiného sešitu makrem

Napsal: 24 říj 2014 14:52
od revol
Paráda, funguje výborně. Sice zdroj je v jiné složce než cíl a název kopírovaného listu musí být z buňky A1, ale s tím jsem si poradil.

Mám jeden dotaz. Zdroj, ze kterého kopíruju list má nějaká externí data a proto se vždy při otevření ptá, zda chci data akutualizovat. Při použití tohoto makra se zdroj otevře, zeptá se mě to zda chci aktualizovat, pak se zdroj zavře a list se nezkopíruje, jakmile ale makro použiji znovu, tak se list zkopíruje už bez ptaní.

Nedá se mu nadefinovat, at se neptá a bere ty data, která tam byla uložena při posledním ukládání, případně, ať si sám potvrdí, že se mají zaktualizovat?

Jinak díky za makro, toto je pro mě vyšší dívčí, to bych sám nedal..

Re: kopie listu z jiného sešitu makrem

Napsal: 24 říj 2014 19:33
od guest
Chování ve vztahu k aktualizaci propojených dat zkuste nastavit přímo v propojeném sešitu.

Excel 2010: Soubor / Informace / Upravit odkazy na soubory / Výzva při spuštění

Re: kopie listu z jiného sešitu makrem

Napsal: 06 lis 2014 16:03
od revol
měl bych ještě dotaz. Při testování jsem zjistil, že po zkopírování listu, nejde zdroj otevřít, respektive se otevře, zeptá se na aktualizace externích dat,ale zůstane šedivý excel jako by soubor nebyl otevřený. Když excel zavřu,tak se ptá, zda ho chci uložit.

Soubor jsem tedy obnovil ze zálohy a použil Tvou radu:
xlnc píše:Soubor / Informace / Upravit odkazy na soubory / Výzva při spuštění

Teď soubor funguje, takže dík.

Dotaz spočívá v tom, že poté co se list nakopíruje, tak zůstane zdrojový soubor někde na pozadí otevřen, sice není vidět, že je otevřen (opět vidím jen šedivý excel), ale když excel zavírám tak se ptá zda ho chci uložit. Problém je, že se souborem pracuje více lidí a já ho tímto blokuju. Nevím proč se to děje,ale nešlo by tam přidat, že po nakopírovaní se zdrojový excel bez uložení zavře?

Kód: Vybrat vše

Workbooks("sesit.xls").Close SaveChanges:=False
nefunguje:-(

Re: kopie listu z jiného sešitu makrem

Napsal: 06 lis 2014 18:44
od cmuch
Vynechej v názvu sešitu koncovku.

Kód: Vybrat vše

Workbooks("sesit").Close SaveChanges:=False

Re: kopie listu z jiného sešitu makrem

Napsal: 07 lis 2014 09:00
od revol

Kód: Vybrat vše

Sub kopie()
   
    Dim wshZdroj As Worksheet

    Set wkbCil = ThisWorkbook

    Set wkbZdroj = GetObject("T:\Správa\Mel 3, P2.xls")
    Set wshZdroj = wkbZdroj.Worksheets([A1].Value)

    wshZdroj.Copy After:=wkbCil.Worksheets("Data")
   
    Set wshZdroj = Nothing
    Set wkbZdroj = Nothing
   
    Workbooks("T:\Správa\Mel 3, P2").Close SaveChanges:=False

End Sub


Nefunguje:-( List zkopíruje, hodí mi to chybu "Subscript out of range" a opět je zdrojový soubor otevřený

Nevadí mezera v názvu souboru?

Re: kopie listu z jiného sešitu makrem

Napsal: 07 lis 2014 13:23
od cmuch
Upraveno.

Kód: Vybrat vše

Sub kopie()
   
    Dim wshZdroj As Worksheet

    Set wkbCil = ThisWorkbook

    Set wkbZdroj = GetObject("T:\Správa\Mel 3, P2.xls")
    Set wshZdroj = wkbZdroj.Worksheets([A1].Value)

    wshZdroj.Copy After:=wkbCil.Worksheets("Data")
   
    wkbZdroj.Close SaveChanges:=False

    Set wshZdroj = Nothing
    Set wkbZdroj = Nothing

End Sub