< návrat zpět

MS Excel


Téma: Kopie více listů rss

Zaslal/a 7.5.2012 22:39

Zdravím, potřebuji makrem zkopírovat více listů do nového sešitu. Kopírované listy obsahují vzorce a já bych potřeboval, aby se do nového sešitu zkopírovala jen data bez vzorců, popřípadě odkazů. Níže uvedený kód fungoval přesně tak jak potřebuji, ale pouze pokud kopíroval jediný list, když jsem přidal ještě jeden, tak to hází chybu. Kde jsem udělal chybu?

Worksheets(Array("Faktura", "List4")).Select
Sheets(Array("Faktura", "List4")).Copy
ActiveSheet.Cells.UnMerge
ActiveSheet.Cells(1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Zde je neupravený kód pro kopii 1 listu:
Worksheets("Faktura").Copy
ActiveSheet.Cells.UnMerge
Workbooks(zdroj).Sheets("Faktura").Cells.Copy
ActiveSheet.Cells(1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ActiveSheet.Shapes("TL1").Delete

Zaslat odpověď >

#008407
avatar
nemozes len tak hodit dva listy do pole a skusat obidva naraz skopirovat - to nejde, musis to spravit po jednom, tj. ten druhy kod ktory funguje pouzi dvakrat po sebe len zmen nazov toho listu. V pripade ze by si mal tych listov strasne vela tak sa samozrejme da pouzit pole ale musis pouzit cyklus a v kazdom cykle kopirovat zas len jednu polozku z pole.citovat
#008414
avatar
Diky za radu. V planu mam kopie cca20listu. Je ta druha moznost narocna na napsani kodu?citovat
#008415
avatar
Nie nie je.
Je to jednoduchý cyklus.
Záleží iba na tom či chceš kopírovať všetky listy alebo iba tie čo si vyberieš.citovat
#008416
avatar
neviem co presne ma tvoj kod robit ale skusil by som nieco take

Sub kopiruj()

listy = Array("prvy", "druhy", "faktura", "zaloha")

For llist = 0 To UBound(listy)
Worksheets(listy(List)).Copy
ActiveSheet.Cells.UnMerge
Workbooks(zdroj).Sheets(listy(llist)).Cells.Copy
ActiveSheet.Cells(1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
ActiveSheet.Shapes("TL1").Delete
Next llist
End Sub
citovat
#008425
avatar
Díky za typy, ale bohužel ani jedna z možností nefunguje. Vždy se mě zkopíruje pouze jeden list. Nevím kde bych mohl dělat chybu 7citovat
#008426
avatar
Našel jsem jedno použitelné makro pro export více listů, ale pro mou potřebu bych potřeboval pomoci s úpravou(viz příloha):
Aby se kopie listů uložila bez maker, dále místo vzorců zůstala jen hodnota v buňce. Prostě aby neexistovalo žádné propojení do zdrojového sešitu. Je to reálné?

Šla by do kódu přidat možnost, aby když se zkopírují listy tak aby se zobrazila možnost uložit jako, nebo aby se nový sešit automaticky uložil pod jménem Faktura + číslo v buňce A1?
Zkoušel jsem nějaké své pokusy, ale marně:-(
Díky moc za pomoc.
Příloha: rar8426_sesit1.rar (19kB, staženo 30x)
citovat
#008428
avatar
tak este raz a teraz uz otestovana verzia toho mojho kodu, skus

Sub Makro2()
novy_subor = "xxx.xls"
zdroj = ActiveWorkbook.Name
ChDir Application.ThisWorkbook.Path

listy = Array("Január", "Február", "Marec", "April")

Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
novy_subor, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False

For llist = 0 To UBound(listy)
Windows(zdroj).Activate
Sheets(listy(llist)).Select

Sheets(listy(llist)).Copy before:=Workbooks(novy_subor).Sheets(1)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next llist

End Sub
citovat
#008429
avatar
SUper, funguje perfektně.
Ještě se jen zeptám, bylo by těžké pojmenovat sešit dle Buňky A1 z listu Faktura?
Jinak děkuji moc. Pomohl jsi mě.citovat
#008441
avatar
vymen v kode toto

novy_subor = Sheets("Faktura").Cells(1, 1).Value & ".xls"citovat
#008444
avatar
Diky, funguje.
Snažil jsem se dát dohromady níže uvedený kód, ale je tam nějaká chyba. Můžete se mě na to prosím někdo juknout kde je chyba/chyby?
Kód by měl Vytvořit kopie stránek do samostatného sešitu, a ten pojmenovat dle Buňky a zobrazit možnost uložit jako. Před uložením ještě podmínka zkontroluje zda již sešit s tímto číslem existuje.
Už jsem bezradný. Prosím o pomoc.

Sub Export_listu()
Application.DisplayAlerts = False
Application.ScreenUpdating = False

zdroj = ActiveWorkbook.Name
ChDir Application.ThisWorkbook.Path

novy_subor = Worksheets("Nabídka").Cells(13, 18).Value '
Listy = Array("Faktura", "Nabídka")

Workbooks.Add
ActiveWorkbook.SaveAs filename:= _
novy_subor, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False

For llist = 0 To UBound(Listy)
Windows(zdroj).Activate
Sheets(Listy(llist)).Select

Sheets(Listy(llist)).Copy before:=Workbooks(novy_subor).Sheets(1)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Worksheets("List1").Delete
Worksheets("List2").Delete
Worksheets("List3").Delete
Worksheets("Nabídka").Activate
Range("A1").Select

' následuje přejmenování

nove_jmeno = "" & novy_subor ' buňka I1 - číslo faktury
' nastavení cesty pro uložení
Dim filename As Variant
filename = Application.GetSaveAsFilename(nove_jmeno, "Excel (*.xls),*.*,Excel 07 (*.xls),*.*,", 1, "Uložit jako")
If filename = False Then Exit Sub
cele_jmeno = filename

'=existuje uz soubor faktury?
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(cele_jmeno) Then
sZprava = MsgBox("Ve vámi zvoleném adresáři již tento soubor existuje, chcete tento soubor přepsat?" & vbCrLf & "...zápis v databazi bude nezměněn...", vbYesNo, "Přepsat soubor?")
Select Case sZprava
Case vbNo
Workbooks(Workbooks.Count).Close (False)
Application.CutCopyMode = False
Exit Sub
Case vbYes
End Select
End If
Next llist

Application.DisplayAlerts = True
Application.ScreenUpdating = True
ActiveWorkbook.Close

End Subcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse