Přeskočit navigaci | Přeskočit na novinky

Nový videokurz na Seduo: Excel pro začátečníky

     

Jste zde: Úvodní stránka » excel » vba-soubory » tisk-do-pdf-excel-vba

Uložit (Tisk) do *.pdf - Excel VBA makro


... jak automaticky ukládat (tisknout) excelovské sešity do pdf ve VBA Microsoft Excel ...

Doplněno: 5.6.2013 - na základě dotazů.

Úvod

Excel VBA logo

Máte-li potřebu z Excelu exportovat výsledky vaší práce, ale nechcete použít originální soubor (v *.xls, *.xlsx předávat výpočty) ani používat tisk na papír (šetříte lesy a vaší kapsu). Můžete využít export (ukládání, tisk) do formátu *.pdf.

Pro export vyžijeme v Excelu VBA makro. (příklady jsou pro Excel 2007 a Excel 2010, které mají tutu možnost integrovaou) .

Poznámka: Pokud máte Excel 2007, musíte si podporu pro tisk do *.pdf zdarma nainstalovat z webu Microsoftu.

Google nachází složité postupy tisku přes Adobe Reader nebo externí pdf tiskárnu, u čehož vidím nevýhodu v nutnosti instalovat další program (mnohdy placený). Proto doporučuji využít přímo samotný Microsoft Excel (2007 a vyšší) .

Rychlý obsah článku:

Pro export (uložení, tisk) využijeme ExportAsFixedFormat. V článku se dozvíte:

  • Syntaxe - ExportAsFixedFormat
  • Export (Tisk) aktivního listu - pdf
  • Export (Tisk) z více listů (vybraných)
  • Export (tisk) celého sešitu
  • Změna kvality
  • Ne/zobrazovat exportované pdf
  • Dynamické jméno souboru (buňky, datum)

Syntaxe - ExportAsFixedFormat

Jak vypadá syntaxe ExportAsFixedFormat

ExportAsFixedFormat(Type, Filename, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr)

Popis:

  • Type - povinné - typ exportovaného dokumentu (xlTypePDF nebo xlTypeXPS)
  • Filename - volitelné - jméno pod kterým se ukládá
  • Quality - volitelné - kvalita dokumentu (xlQualityStandard nebo xlQualityMinimum).
  • IncludeDocProperties - volitelné - (TRUE - FALSE)
  • IgnorePrintAreas - volitelné - (TRUE - FALSE)
  • From - volitelné - od které stránky
  • To - volitelné - do které stránky
  • OpenAfterPublish - volitelné - zobrazit po zpracování (TRUE - FALSE)
  • FixedFormatExtClassPtr - volitelné

Tisk aktivního listu - pdf

Otestujeme si na jednoduchém příkladu, že nám vše chodí.

Sub TiskDoPdf()      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _      "E:\pokusy-www\excel-VBA-tisk-do-pdf.pdf", Quality:= _      xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _      OpenAfterPublish:=True End Sub

Toto makro vytvoří v adresáři E:\pokusy-www\ soubor: excel-VBA-tisk-do-pdf.pdf, takže ve svém PC musí cesta existovat, stejně jako povolený přístup zápisu (VBA makro nekontroluje a není ošetřeno nesplenění)

Tisk z více listů (vybraných)

Sub TiskDoPdf 2()     Sheets(Array("List1", "List2")).Select     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _     "E:\pokusy-www\excel-VBA-tisk-do-pdf.pdf", Quality:=_     xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _      OpenAfterPublish:=True End Sub

Tisk celého sešitu

Jak vytisknout (exportovat) celý sešit.

ActiveWorkbook.ExportAsFixedFormat

Změna kvality

Jak změnit kvalitu exportu (velikost výsledného souboru):

Quality:= xlQualityMinimum

Ne/zobrazovat exportované pdf

Pokud po exportování nechcete exportovaný (ukládaný) soubor zobrazit. Má ze následek část kódu:

OpenAfterPublish:=False

Dynamické jméno souboru (buňky, datum)

Chcete-li název exportovaného souboru dynamicky nastavovat, nepříklad hodnotou v buňce A1.

Adresaář je pevně zadán d:\dokumenty\

a = Range("A1").Text soubor = "d:\dokumenty\" & a & ".pdf"     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _     soubor, Quality:=_     xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _      OpenAfterPublish:=True

Jméno je složeno a doplněno o datum

FJmeno = Sheets("List1").Range("A1").Text FDoklad = Sheets("List1").Range("A2").Text a = FJmeno & FDoklad & Format(Now, "yyyymmdd")

Aktuální adresář:

' soubor s makrem musí být uložen, ' jinak se cesta nezobrazí, což je určitě jasné ;) CestaAdresare = ThisWorkbook.Path a = Range("A1").Text soubor = CestaAdresare & "\" & a & ".pdf" ' následujícím řádkem můžete zkontrolovat spravnou cestu s názvem ' MsgBox (soubor)

Závěr

A jaké jsou Vaše zkušenosti s exportem (ukládáním)?

Článek byl aktualizován: 01.11.2014 14:35

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák

Pavel Lasák - autor webu

Microsoft Office (Word, Excel, PowerPoint) se věnuji od roku 2006. Své vědomosti a zkušenosti dávám k dispozici na různých školeních a konzultacích, ale také na tomto webu. K dispozici na tomto webu je mnoho návodu, tipů a triků včetně desítek různých šablon.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil

Doporučte tento článek přátelům

Pokud vám článek pomohl, případně si myslíte, že může pomoci i někomu dalšímu, budu rád když jej sdílením doporučíte přátelům - děkuji:



Komentáře


František

Přidáno: 07.01.12 05:41

Super, ale ještě by to chtělo, jestli to Excel umí, ten soubor *.pdf poslat mailem někam@seznam.cz.Nejlépe bez Outloku.

Pavel Lasák

Přidáno: 07.01.12 07:52

To František: Excel to umí. Jak na to bez Outloku je popsáno třeba na http://www.rondebruin.nl/cdo.htm

František

Přidáno: 07.01.12 18:46

Díky asi to fakt půjde,ale ne mě, neumím a nerozumím (učil jsem se ve škole akorát rusky,samouk doma německy,ale anglina nic moc): Pochopil jsem akorát kam dát mail.adresu odesilatele a adresáta.jinak nevím co a kam a jak!.Ale i tak dík.Kdyby byl náhodou čas a chtělo se Vám náhodou pomoci (f1f@seznam.cz). Sub CDO_Mail_Small_Text() Dim iMsg As Object Dim iConf As Object Dim strbody As String ' Dim Flds As Variant Set iMsg = CreateObject("CDO.Message") Set iConf = CreateObject("CDO.Configuration") ' iConf.Load -1 ' CDO Source Defaults ' Set Flds = iConf.Fields ' With Flds ' .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ' .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") _ ' = "Fill in your SMTP server here" ' .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 ' .Update ' End With strbody = "Hi there" & vbNewLine & vbNewLine & _ "This is line 1" & vbNewLine & _ "This is line 2" & vbNewLine & _ "This is line 3" & vbNewLine & _ "This is line 4" With iMsg Set .Configuration = iConf .To = "ron@debruin.nl" .CC = "" .BCC = "" .From = """Ron"" " .Subject = "New figures" .TextBody = strbody .Send End With End Sub

Pavel Lasák

Přidáno: 08.01.12 10:54

To František: Osobně využívám Objekt Outlook, kde je již vše nastaveno (smtp server). Nemůžete využít alespoň Outlook Express? Budu-li mít trochu čas zkusím se podívat jak zprovoznit odesílání emailu s přílohou i bez Outlooku.

Roman

Přidáno: 12.02.12 10:28

zdarvim vas.. makra neovladam.. lze nejak toto makro upravit tak aby nazev souboru se menil podle bunky v listu? příklad d:\dokumenty\soubor-xxxxxx.pdf kde xxxxxx se meni podle obsahu nejake bunky. Diky za odpoveded.

Pavel Lasák

Přidáno: 12.02.12 14:04

To Roman: Lze jednoduše a = Range("A1").Text soubor = "d:\dokumenty\soubor-" & a & ".pdf" ´ ... Filename:= soubor ....

Raty

Přidáno: 12.02.12 21:38

Pane Lasák, úžasné stránky. Přesně toto dnes zkouším. Jen potřebuji ještě zpětnou vazbu, tj aby makro zkontrolovalo, zda se již nevyskytuje soubor téhož jména. Používáme jeden soubor, kde se mění jen několik základních údajů, ten se vytiskne, ale musí zůstat kopie pro kontrolní účely. Díky

Pavel Lasák

Přidáno: 13.02.12 08:57

To Raty: viz. http://office.lasakovi.com/excel/vba-soubory/excel-vba-soubor-slozka-adresar/

Raty

Přidáno: 13.02.12 11:35

Moc děkuji:-) Musí ty vaše stránky pořádně prohledat .

skaj

Přidáno: 15.02.12 09:12

Dobrý den, shora uvedené makro převodu listu excel do formátu .pdf používám v jednom komplikovanějším projektu. Potřeboval bych ale poradit, a o to prosím,zda by bylo možné zobrazení dokumentu, vyvolané touto částí kódu: OpenAfterPublish:=True pozdržet s tím, že by mezi převodem listu excel a jeho zobrazením v novém formátu byla vložena zpráva pro uživatele. Pro názornost, oč mi jde: Sub TiskDoPdf 2() Sheets(Array("List1", "List2")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "E:\pokusy-www\excel-VBA-tisk-do-pdf.pdf", Quality:=_ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ Zde běh makra pozastavit na dobu, než uživatel přečte vloženou zprávu (MsgBox) čítající cca 3 řádky, poté teprve zobrazit dokument .pdf OpenAfterPublish:=True End Sub Díky za pomoc.

Pavel Lasák

Přidáno: 15.02.12 10:40

To skaj: OpenAfterPublish:=True je součásti ExportAsFixedFormat (exportu do *.pdf). Nemůžete zobrazit hlášku napřed: Sheets(Array("List1", "List2")).Select MsgBox "Text" Až poté publikovat do *.pdf se zobrazením daného dokumentu? ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "E:\pokusy-www\excel-VBA-tisk-do-pdf.pdf", Quality:=_ xlQualityStandard, IncludeDocProperties:=True, OpenAfterPublish:=True

skaj

Přidáno: 15.02.12 16:55

Díky za rychlou reakci. Myslel jsem si to. Problémem celého projektu je, že hláška nemůže předcházet převodu formátu, takže je prozatímně umístěna až za převod listu (do .pdf). Na základě hlášení by však měl uživatel reagovat na text dokumentu PDF, což je problém: jakmile se převod dokončí, a to je mnohdy velmi rychle, překryje nově vzniklý otevřený dokument hlášení MsgBoxu. Protože uživatel musí reagovat na text PDF dokumentu, nemohu jej nechat po převodu uzavřený: OpenAfterPublish:=False Takže nastává manipulace s otevřeným dokumentem (shození na lištu atp.), dočtení hlášení MsgBoxu, otevření dokumentu .pdf, kontrola dle hlášení atp..atp.

skaj

Přidáno: 15.02.12 17:10

Dodatek:snad by pomohlo nějaké řešení, které by zaručilo, aby bylo hlášení MsgBoxu vždy "nahoře", tedy viditelné i po otevření převedeného dokumentu. Každopádně díky za zájem o položený dotaz.

Pavel Lasák

Přidáno: 15.02.12 17:59

To skaj: zajimavý dotaz, třeba mě nebo někoho z čtenářů něco napadne.

Jaroslav Petrovský

Přidáno: 22.03.12 08:25

Prosím jak udělat kód, abych mohl vytisknout oblast z jiného listu, než kde mám tlačítko. Takto jak to mám já, to vytiskne pouze z aktuálního listu (ActiveSheet). Děkuji moc. Private Sub CommandButton1_Click() 'Tisk ActiveSheet.PageSetup.PrintArea = "$B$9:$G$19" 'ActiveWindow.SelectedSheets.PrintPreview Application.Dialogs(xlDialogPrint).Show End Sub

Jaroslav Petrovský

Přidáno: 22.03.12 16:38

Dodatek k předešlému: udělal jsem to takto. Jenže já nechci, aby se na obrazovce zobrazil ten list z kterého se tiskne. Mělo by to být tak, že se klikne na tlačítko a objeví se dialog pro tisk, jak je napsáno, kde si může člověk dát náhled. A ještě navíc bych chtěl, aby ten list byl skrytý a pouze pro tisk se zviditelnil a potom zase zneviditelnil. Private Sub CommandButton1_Click() 'Tisk List13.Activate ActiveSheet.PageSetup.PrintArea = "T!$B$9:$G$19" 'ActiveWindow.SelectedSheets.PrintPreview Application.Dialogs(xlDialogPrint).Show End Sub

Jaroslav Petrovský

Přidáno: 22.03.12 17:23

Ještě prosím o pomoc s tímto? Jak udělat kód ve VBA, aby se jedna tabulka pro tisk zobrazila vícekrát na straně. a) Chci tisknout jednu tabulku, která třeba zabere 1/3 strany A4, ale pro úsporu místa bych ji potřeboval nakopírovat pod sebe vícekrát (potřebuji více stejných kopíí, které se potom nastříhají). b) Chci tisknout více různých tabulek, které se nachází na různých místech jednoho listu.

Pavel Lasák

Přidáno: 26.03.12 18:32

To Jaroslav Petrovský: Tisk z jiného listu Sheets(Array("List11", "List12")).Select List se dá zobrazi a skrýt pomocí VBA kódu (změní se vlastnost Visible: Sheets(1).Visible = xlSheetHidden Tohle sjem nikdy neřešil. Osobně bych na dalším listě rozkopíroval danou tabulku.

Pavel Lasák

Přidáno: 26.03.12 18:41

To Jaroslav Petrovský: Nastavení oblasti tisku ´Sheet1.PageSetup.PrintArea ´například: ActiveSheet.PageSetup.PrintArea = "$B$4:$H$16" Připravím článek, jak nastavit a přizpůsobit oblast tisku.

Pavel Š.

Přidáno: 30.03.12 00:40

Dobrý den, tohle mi opravdu hodně pomohlo! Jenom mám takový problém, protože bych potřeboval přeskládat listy které se mi budou tisknout do onoho pdf. Aktuálně mi to bere listy tak jak jdou za sebou... P.

Pavel Lasák

Přidáno: 30.03.12 16:34

To Pavel Š: Jinak zajimavý dotaz. Doporučuji přeskládat listy:( Sheets("List2").Select Sheets("List2").Move Before:=Sheets(1) Zkoušel jsem, a funguje nadefinovat oblastí pomocí Select, ale neprojde a prostě Excel tiskne jak jsou listy za sebou v sešitě Excel Sheets(Array("List3", "List2", "List1")).Select

Pavel Š.

Přidáno: 30.03.12 20:48

Vyzkoušel jsem přeskládání listů ve VBA a funguje to skvěle. Netušil jsem, že to jde :-). Moc děkuji!

Pavel Lasák

Přidáno: 01.04.12 09:02

To Pavel Š. rádo se stalo.

Jaroslav Petrovský

Přidáno: 06.04.12 22:57

Děkuji moc, trápím se, trápím a nejde to. Tisknu pomocí tlačítka ze sešitu pojmenovaného 3R (sešit 21). A nevím jak tam zakomponovat to, aby se mi to nikam nepřepínalo a nic neukazovalo, jak to kopíruje apod. Děkuji moc za pomoc Co je to a musí to tam být: ActiveWindow.SmallScroll Down:=6 Sub tlačítko307_Klepnutí() 'copy Sheets("T").Select Range("B566:C579").Select Selection.Copy Range("M461:N474").Select ActiveSheet.Paste Range("M476:N489").Select ActiveSheet.Paste Range("M491:N504").Select ActiveSheet.Paste ActiveWindow.SmallScroll Down:=6 Range("M506:N519").Select ActiveSheet.Paste Application.CutCopyMode = False Sheets("3R").Select 'Tisk List13.Activate ActiveSheet.PageSetup.PrintArea = "T!$K$461:$R$519" 'ActiveWindow.SelectedSheets.PrintPreview With ActiveSheet.PageSetup .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0.196850393700787) .BottomMargin = Application.InchesToPoints(0.196850393700787) .HeaderMargin = Application.InchesToPoints(0.31496062992126) .FooterMargin = Application.InchesToPoints(0.31496062992126) .PrintHeadings = False .PrintGridlines = False .CenterHorizontally = True .CenterVertically = True .Orientation = xlPortrait .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With Application.Dialogs(xlDialogPrint).Show Range("M461:N519").Select Selection.ClearContents Range("M461:N461").Select List21.Activate End Sub

Pavel Lasák

Přidáno: 11.04.12 21:31

To Jaroslav Petrovský: Application.ScreenUpdating = True .... Application.ScreenUpdating = False nepomůže?

Jaroslav Petrovský

Přidáno: 12.04.12 08:30

ne - viz http://www.uschovna.cz/zasilka/H1395GG6TCGD5FJK-7UB děkuji moc za pomoc

Pavel Lasák

Přidáno: 15.04.12 18:06

To Jaroslav Petrovský: Co přesně potřebujete? Osobně bych makro napsal jinak.

Peter

Přidáno: 28.06.12 14:09

Zdravim, Mozte mi prosim poradit ako spravit, - aby sa ma Excel pri exportovani do PDF spytal na umiestnenie? - aby neexportoval do pdf pomocou nejakych podpornych programov? (adobe reader je OK) Dakujem Pekne. Peter

Pavel Lasák

Přidáno: 28.06.12 16:21

To Peter: Přes InputBox.

Filip

Přidáno: 23.08.12 14:48

Dobrý den, chtěl bych se zeptat, jestli je možné toto makro využít tak, že by se soubor exportoval do pdf až po stisknutí tlačítka na konci formuláře. Například dokončit a uložit... Děkuji

Pavel Lasák

Přidáno: 23.08.12 17:43

To Filip: Jasně stačí kód prezentovaný vložit do toho tlačítka.

Miloš Gallovič

Přidáno: 20.09.12 09:38

Dobrý den, neumím přijít na to jak z makra nechat vytisknout externí pdf. Potřebuji totiž u tisku donutit uživatele, aby si vytiskl i další soubor, který je ovšem v pdf. Umíte mi poradit prosím? Děkuji

Pavel Lasák

Přidáno: 20.09.12 18:18

To Miloš Gallovič: Gogle našel tento postup myfile = "c:\documents\" & range("a1").value & ".pdf" ShellExecute 0, "print", myfile, vbNullString, 0, SW_SHOWNORMAL viz http://www.vbforums.com/archive/index.php/t-481280.html nezkoušel jsem

Miloš Gallovič

Přidáno: 21.09.12 07:48

Super, děkuji. Po boji jsem dal dohromady toto (funguje to dobře, pouze zůstane po ukončení otevřený acrobat reader): #If VBA7 Then Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #Else Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #End If Sub tisk() Dim RetVal As Long RetVal = ShellExecute(0, "print", ThisWorkbook.Path & "\soubor.pdf", vbNullString, 0, SW_SHOWNORMAL) If RetVal < 32 Then MsgBox "U tisku souboru nastala chyba. Prosím vytiskněte manuálně." End If End Sub

Pavel Lasák

Přidáno: 21.09.12 16:30

To Miloš Gallovič: Díky za zveřejnění funkčního kódu, určitě se bude někomu dalšímu hodit.

Filip Klus

Přidáno: 04.10.12 08:56

Dobrý den, chtěl bych se zeptat, jestli je pomocí makra možné soubor ukončit a uložit pomocí tlačítka do pdf. Potřeboval bych to ale udělat přes tisk a pdf creator. Poté co by se nový soubor uložil, potřeboval bych, aby se excel zavřel. podle vašich rad zde jsem už zvládl jak to udělat přes uložení do pdf, ale přes tisk mi to nechce jít. Děkuji

Pavel Lasák

Přidáno: 04.10.12 16:31

To Filip Klus: Jak tisknout přes pdf Creator je řešeno: http://www.vbaexpress.com/forum/showthread.php?t=14397 Ukončení Excelu přes Application.Quit jsem popsal http://office.lasakovi.com/excel/vba-application/ukonceni-aplikace-excel-vba/

Petra

Přidáno: 05.10.12 06:15

Dobrý den, je možnost vytisknou pouze oblast buněk? zkoušela jsem několik možností... výběr se sice označí, ale uloží se mi vždyy celá stránka

Filip Klus

Přidáno: 05.10.12 09:48

To Pavel Lašák: Díky, ukončení jsem zvládl, to bylo celkem snadné, ale to uložení přes PDF creator je i s návodem nad moje síly. Přesto děkuji za radu.

Petr Sukalovský

Přidáno: 15.10.12 19:28

Dobrý den, Rád bych Vás požádal o radu s následujícím problémem. Použil jsem Vámi publikované makro pro export do PDF, ale vždy po stisknutí tlačítka se objeví chybové hlášení: Run-time error 1004" Dokument je otevřen nebo došlo při ukládání k chybě. Můžete mi prosím poradit, co je za problém.

Děkuji Sub Save() Sheets("List2").Select a = Range("B5").Text soubor = "C:\users\projekty\soubor-" & a & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=soubor, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End Sub

Pavel Lasák

Přidáno: 15.10.12 21:29

To Petr Sukalovský: Zkuste si do MsgBox vypsat celou cestu, zda je správná. ... soubor = "C:\users\projekty\soubor-" & a & ".pdf" msgbox (soubor) ...

Petr Sukalovský

Přidáno: 17.10.12 21:27

Použil jsem Vaší radu a zdá se, že cesta je správně, v tom asi problém nebude.

Pavel Lasák

Přidáno: 18.10.12 05:29

To Petr Sukalovský: Kterou verzi Excelu máte 2010? Předpokládám, že do složky přístup je a soubor tohoto jména neexistuje. Když soubor uložíte ručně projde? Když zkusíte uložit do jiné složky?

Petr Sukalovský

Přidáno: 22.10.12 18:10

Ano, používám Excel 2010. Ruční uložení funguje, pokud zkusím ukládat pomocí makra do jiné složky, objeví se stejný problém.

Pavel Lasák

Přidáno: 23.10.12 17:33

To Petr Sukalovský: Do stejné složky makrem funguje? Osobně se mi tento problém nenaří nasimulovat, zouším ukládat i na jiný disk a funguje.

tomas

Přidáno: 20.11.12 15:37

dobrý den, co dělat když procedura ActiveSheet.ExportAsFixedFormat nefunguje, nevím proč, ale pouze na jednom PC kde je v Excelu 2007 verze VB 6.5 1020, jinak ostatní PC mají VB 6.5 1054 a na nich je procedura funkční. Je chyba v nějakém nastavení, chybějící knihovna např.? Nebo lze ukládat do PDF jiným způsobem třeba přes SaveAs, tahle metoda tam funguje. díky

Pavel Lasák

Přidáno: 20.11.12 16:58

To tomas: Do Office 2007 se musí doinstalovat doplněk uložit jako pdf http://www.microsoft.com/cs-cz/download/details.aspx?id=7 zkuste zkontrolovat zda je nainstalováno. Doplněk je zdarma.

Tom

Přidáno: 03.12.12 20:33

Dobrý den, chtěl bych se zeptat, bylo by možné upravit makro tak, aby ukládalo pdf soubor podle toho na jakém počítači zrovna s dokumentem pracuji? Jde mi o to, že pokud jsem na jiném počítači, tak na něm je jiné cesta pro uložení na sdílenou složku. předem děkuji za odpověď.

Pavel Lasák

Přidáno: 04.12.12 20:24

To Tom: Jinou cestu mylíte jiný disk? F:, S:? Pokud je totiž pevně zadaná lze využít S:\pokusy-www\excel-VBA-tisk-do-pdf.pdf

Tom

Přidáno: 04.12.12 21:58

Kdybych zmenil jen disk tak bych nevyresil problem s ukladanim na druhem pocitaci. Pouzivam jako spolecnou slozku Dropbox a potreboval bych makro nastavit tak, ze kdyz pracuju s dokmentem na stolnim pocitaci, tak aby ulozil pdf na C:\user\tom\dropbox a na notebooku by jej ulozil na C:\verejne\dropbox.

Pavel Lasák

Přidáno: 05.12.12 06:13

To Tom: Napadá mě využít jméno PC a přes Case (nebo podmínku) určit složku.

Tom

Přidáno: 06.12.12 20:28

Prosím ješte o pomoc jak by ten kód měl vypadat. Zkoušel jsem to někde najít, ale nepovedlo se :-( předem děkuji.

Lastman

Přidáno: 27.02.13 10:34

Zdravím, rád bych se zeptal, jak by vypadala synaxe, kdybych si chtěl nastavit jméno výstupního souboru podle obsahu v nějaké buňce "C:\Test\ ", Quality:=_ děkuji za pomoc, ve VB jsem začátečník.

Pavel Lasák

Přidáno: 27.02.13 17:36

To Tom: Viz článek o Case Select http://office.lasakovi.com/excel/vba-teorie-zaklady/select-case-excel-vba/

Pavel Lasák

Přidáno: 27.02.13 17:41

To Lastman: Například: FJmeno = Sheets("List1").Range("A1").Text FDoklad = Sheets("List1").Range("A2").Text JmenosDatumem = FJmeno & FDoklad & Format(Now, "yyyymmdd") Více v článku: http://office.lasakovi.com/excel/vba-soubory/SaveAs-metoda-ulozit-jako/

Vašek

Přidáno: 23.05.13 07:54

Dobrý, předem děkuji za Vaše stránky. dali mi mnohem více než nějaké knížky a lekce. Rád bych se ale zeptal na problém, když se mi název pdf souboru tvoří z buňky, jejíž text občas obsahuje např lomítko. jde tedy nějak ošetřit aby nevyskakovala chyba a třeba se to lomítko ignorovalo popř. zaměnilo?

Pavel Lasák

Přidáno: 23.05.13 16:07

To Vašek: Jde třeba nahratit lomítko / třeba mínus - pomocí funkce NAHRADIT (REPLACE) HodnotaPred = Range("A1").Value MsgBox HodnotaPred HodnotaPo = Replace(HodnotaPred, "/", "-") MsgBox HodnotaPo

zEjn

Přidáno: 04.06.13 20:33

Ahoj, prosím o radu, upravil jsem si makro tak, aby se mi soubor PDF ukládal do složky kde je aktuální soubor, ale makro soubor neuloží, pouze zobrazí s název NEPRAVDA.pdf Sub TiskDoPDF2() ActiveSheet.Select JmenoSouboru = Range("A1").Text soubor = CestaVcetneNazvuSouboru = CestaAdresare & " \ " & JmenoSouboru & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=soubor, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True End Sub Prosím o radu kde je chyba. Děkuji.

Pavel Lasák

Přidáno: 05.06.13 16:19

To zEjn: 1) Není definováno CestaAdresare 2) je použito 2x = soubor = CestaVcetneNazvuSouboru = možno nahradit soubor = JmenoSouboru & ".pdf" Připadně doplnit o cestu kam se má ukládat

zEjn

Přidáno: 05.06.13 16:38

Pravě že bych potřeboval aby cesta byla proměnná a vždy se PDF uložilo do adresáře kde je uložený excel soubor a to jsem chtěl nadefinovat příkazem CestaVcetneNazvuSouboru. Podadíte mi jak toto zadat? Děkuji.

Pavel Lasák

Přidáno: 05.06.13 18:16

To zEjn: Aktuální adresář, ve kterém je soubor s makrem. CestaAdresare = ThisWorkbook.Path a = Range("A1").Text soubor = CestaAdresare & "\" & a & ".pdf" ' tímto řádem můžete zkontrolovat MsgBox (soubor) Doplnil jsem článek.

zEjn

Přidáno: 05.06.13 18:24

Sub TiskDoPDF2() ActiveSheet.Select a = Range("A1").Text soubor = CestaAdresare & "\" & a & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=soubor, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True End Sub Excel mi vyhazuje chybu 1004, omlouvám se, ale co zde mám špatně? Děkuji.

Pavel Lasák

Přidáno: 05.06.13 19:49

To zEjn: Chybí tam ten aktuální adresář vložit do CestaAdresare jak jsem psal výše ActiveSheet.Select CestaAdresare = ThisWorkbook.Path a = Range("A1").Text soubor = CestaAdresare & "\" & a & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=soubor, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

zEjn

Přidáno: 06.06.13 16:10

Super, už to jde. Děkuji.

elninoslov

Přidáno: 09.06.13 22:10

Dobrý deň. Prosím Vás potrebujem pomôcť. Toto ukladanie do PDF by mi super pomohlo. Založil som na tom a urobil celý projekt. No na konci som si všimol, že absolutne nedodržuje nastavenie strany. Okraje, hlavičku... Čiže ak si dám (Office2013) Ctrl+P a tam Nastavenie strany, kde si nastavím napr. 90% mierku, a okraje, tak vidím že mi všetko na tlačiarni vojde krásne tak ako má. ALe keď to dám cez túto funkciu do PDF, tak mi tam dá nejaké predvolené hodnoty alebo čo, a stránka sa nevojde na stráku, cele je to poposúvané, a konce tabuliek sú na ďalších stranách. Veľmi by mi pomohlo, aby sa nejako natvrdod dal nastaviť formát strany, okraje, hlavička, a nezáležalo na tom, či "tlačím" cez túto PDF funkciu alebo akúkoľvek inú tlačiareň na akomkoľvek PC. Ďakujem.

Matěj

Přidáno: 31.07.13 15:00

Jsem totální začátečník, takže vůbec nevím, kde mám chybu... mohl byste mi prosím pomoci? Z diskuse jsem pochopil, že aktuální adresář vložit do CestaAdresare. Tomuto úplně nerozumím, protože CestaAdresare není statická, nebo je? Můžeme mi prosím konkrétně napsat, co mám udělat? Moc děkuji :) Sub tiskpdf() ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ CestaAdresare = ThisWorkbook.Path a = Range("H3").Text soubor = CestaAdresare & "\" & a & ".pdf" xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub

Otes

Přidáno: 06.09.13 13:27

Dobrý den, nemáte tušení jak Excel donutit při exportu přes vba použít nastavení s ISO19005_1? Děkuji, Otes

Pavel Lasák

Přidáno: 06.09.13 17:32

To Otes: Zpaměti bohužel ne.

Přidáno: 07.09.13 16:48

Tak to vypadá, že Excel jako jediný z Office programů má osekané možnosti exportu do PDF (fce ExportAsFixedFormat). A zbytek nastavení přebírá z konfigurace Excelu, tak aspoň tak.

Husita

Přidáno: 30.12.13 10:49

Dobrý den, chtěl bych se zeptat, jak ošetřit, již otevřený soubor .pdf mám toto makro a když je daný soubor otevřený, zahlásí chybu. Chtěl bych Vás požádat o radu, jak zkontrolovat otevření souboru a jeho následné zavření Sub TiskDoPdf() CestaAdresare = ThisWorkbook.Path Sheets("zaznam").Select nazev = Range("S6").Text ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ CestaAdresare & "\" & nazev & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub děkuji mnohokrát

Zbyněk

Přidáno: 06.01.14 11:03

Dobrý den, mám makro, které ukládá list do PDF. Vše funguje dobře, akorát mám na listech vložené obrázky z corelu a některé z nich jsou v PDF jinak posunuté, širší než v excelu atd. Když však uložím list do PDF ručně, tak je vše v pořádku. Chybí ještě v kódu nějáké nastavení ? Děkuji

Hanka

Přidáno: 03.07.14 07:16

Dobrý den, a šlo by také nastavit makro aby tisk proběhl tak, že jednotlivé listy se uloží do samostatných PDF souborů (např. pod jejich názvy)? Předem díky

Martin

Přidáno: 07.05.15 21:15

Dobrý den, jsem začátečník v makrech a narazil jsem na Váš web, jsou zde pro mě užitečné informace. Obracím se na Vás s prosbou o radu, četl jsem článek o ukládání sešitu do pdf. Lze udělat, aby mi po kliknutí na tlačítko vyskočil formulář, kde si zaškrtám listy, které chci, aby byli v pdf souboru a následně se vygeneroval pdf soubor jen s těmito listy? Předem děkuji.

Martin

Přidáno: 12.05.15 11:17

Většina s emi povedla už vyřešit jen nevím jak v tomto příkazu. Sheets(Array("List1", "List2")).Select odznačit pokažé jiné listy a jiný počet, zkoušel jsem to přes pole, ale když zůstal některý index pole prazdný (nepřiřadil se mu název listu) tak celá program nefungoval a házelo to chybu, můžete poradit co s tím nebo jak to řešet? Děkuji

rotri

Přidáno: 15.05.15 07:43

Dobrý den, mám ukládání do excelu, vše běží. Jen se chci zeptat na to dynamické jméno. Potřebuji, aby datum, které je v buňce I2 se promítlo do názvu takto: SOUBOR_RRMMDD.pdf. Nevím jak Děkuji

Karel

Přidáno: 27.05.15 10:27

Dobrý den, chtěl bych se zeptat, jak nastavit ve VBA export oblasti do PDF. Celý sešit, list, stránky od-do nejsou problém, ale na export např. buňky A1:M26 jsem nepřišel.... Předem díky za radu

kuk

Přidáno: 04.06.15 18:12

Dobrý den, potřebovala bych ve svém excel souboru rozchodit následující funkci: Z více listů vyhledat jméno např. "Novak" a v novém listě by se zobrazila tabulka s výsledky, zobrazující všechny řádky,kde se toto jméno vyskytuje. Na jednom z listů by byl uveden "Novak/ Stary" a tento vysledek by se měl také zahrnout do výsledné tabulky. Tady předpokládám, že bude potřeba zakomponovat funkci "*" buňka "*" pro hledání části slova. Lze něčeho takové v excelu docílit? Děkuji

JanaP

Přidáno: 25.06.15 15:14

Dobrý den, toto makro je báječné, ale potřebuju to rozvinout. V listu máme možnost vybrat pomocí "Data validation" více zemí, k těm se vždy dohledají správná čísla v tabulce. Potřebovala bych, aby se tato jedna tabulka z jednoho listu vygenerovala jako více tabulek (jedna ke každé zemi) do jednoho PDF souboru. Děkuju předem

Vladimír Steffan

Přidáno: 30.07.15 11:15

Dobrý den, narazil jsem na naprosto stejný problém jako pan Petr Sukalovský - program se při tisku do PDF zastaví s chybou 1004 a textem jak uvádí pan Petr. Pikantní na tom celém je, že program odesílá dávku e-mailů s onou vygenerovanou přílohou a na této chybě se zarazí asi tak 1x za 1000 'tisků'. Napadlo mě, zda nedochází někdy ke kolizi při ověření dokončeného zápisu na disk - PDF soubor, při jehož tisku vznikla chyba totiž na disku uložený je, jenom program se zastaví a pochopitelně již neodešle e-mail. Nešlo by to ošetřit krátkým zpožděním? Pokud ano, kam je vložit? Předem mnohokrát děkuji za radu i za Vaše stránky, které jsou skutečnou studnicí vědomostí.

Ladis

Přidáno: 17.09.15 21:29

Zdravím, tak jsem si vytknul úkol, kdy pomocí hromadné korespondence mám PDF s 316 stranami. Kdy jeden celek jsou dvě stránky a toto se opakuje pro různé adresáty. Zde bych pomocí VBA vytvořil makro, které by tisklo po dvou listech do PDF a uložilo podle adresáta. Již mám spojeno do jednoho dokumentu, nebo nevím jak šáhnout do Excelu pro hodnotu. Popisovaná metoda přes ExportAsFixedFormat nějak nechce fungovat. - hlásí chybu i když mu zatím jen pokusně definuji název dokumentu - nevím, jak adresáta vykousnout....v Excelu je to pohodička, ale ten Word je záhadou :) Díky moc..

Snoophy

Přidáno: 01.12.15 10:47

Zdravím, v prvom rade FAKT SUPER STRÁNKY!!! Mám problém s pätou pri tlači, kde chcem aby mi vložilo aktuálna strana z počtu strán. Keď krokujem makro tak to pekne vytvorí a pri tlači je všetko OK tak ako som to v makre zapísal. Ale akonáhle spustím makro, vôbec sa mi to neukáže. Keď tak mi napíšte na vladimir.ciljak@gmail.com a ja vám pošlem súbor spolu s makro na otestovanie. vyzerá to ako keby to makro tak rýchlo prebehne, že odignoruje daný zápis. ďakujem za každú pomoc...

MagdaČ

Přidáno: 08.01.16 08:56

Dobrý den,narazila jsem na stejný problém jako Petr Sukalovský a Vladimír Steffan, ačkoliv mi automatický tisk do pdf nejprve bez problému běhal, při opakovaném spouštění (po smazání předchozí verze souboru) mi po generování pár pdf souborů makro spadne s chybou „Run-time error '1004' Dokument nebyl uložen…“. Našli jste prosím řešení, jak problém odstranit? Děkuji.

Tomáš Baše

Přidáno: 16.05.16 10:18

Pro všechny, kdo chtějí tisknout z excelu pomocí PDFcreator ver. 2. Ale POZOR! Předtím musíte ve Visual Basic, Tools, References zaškrtnout PDF Creator !!! Sub TiskPDF() Dim qPDF As PDFCreator.Queue, pJ As PDFCreator.PrintJob Dim wshNetwork As Object Dim sPDFOut As String sPDFOut = ActiveWorkbook.Path & "\PDFxxx.pdf" Set qPDF = New PDFCreator.Queue qPDF.Initialize Set wshNetwork = CreateObject("WScript.Network") wshNetwork.SetDefaultPrinter "PDFCreator" ActiveWindow.SelectedSheets.PrintOut qPDF.WaitForJob (10) Set pJ = qPDF.NextJob With pJ .SetProfileByGuid ("DefaultGuid") .ConvertTo (sPDFOut) End With If (Not pJ.IsFinished Or Not pJ.IsSuccessful) Then MsgBox "Nelze vytvořit soubor:" & sPDFOut qPDF.ReleaseCom Set qPDF = Nothing Set wshNetwork = Nothing Set pJ = Nothing End Sub

Tomáš

Přidáno: 18.05.16 14:20

Neporadil by někdo jak exportovat (tisk) do .pdf na základě podmínky? Tzn.: Když buňka A1 = ANO, tak vygeneruj pdf listu 1, Když buňka A1 = NE, tak vygeneruj pdf listu 2.

Petr M

Přidáno: 08.06.16 11:46

Dobrý den, při tvorbě makra nahráváním makra pro tisk listu, který je vícestránkový, je zápis makra stejný, ať zvolím jednostranný či oboustranný tisk. Pokud při tvorbě makra nahráváním navolím oboustranný tisk, tak po spuštění makra je tisk správný - oboustranný. Při navolení jiné výchozí tiskárny, podporující též oboustranný tisk se to vytiskne jednostranně. Lze, případně jak, napsat do makra příkaz k oboustrannému tisku? Děkuji

zoedtdt

Přidáno: 18.08.16 06:32

excel macroto pdf filename can be download and create the best product for your product, try this convert an excel file to pdf for free excel macroto pdf filename on http://www.pdfcomponent.com/online/convert-excel-to-pdf/.

Lukáš

Přidáno: 30.08.16 16:05

Dobrý den, prosím o pomoc s následující hláškou (viz. link) v kódu: http://i.stack.imgur.com/cqmPhm.jpg Sub Kalkulace() ' ' Kalkulace Makro ' ' Application.ScreenUpdating = False Sheets("Kalkulace").Visible = 1 Sheets("Kalkulace").Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ True Sheets("Poptávka").Select Sheets("Kalkulace").Visible = 0 Application.ScreenUpdating = True End Sub

Dalibor

Přidáno: 02.09.16 09:40

Dobrý den, žádám o radu: mám v daném dokumentu makro na uložení pod jménem podle obsahu buňky. Zároveň chci, aby výstupní dokument byl ve formátu .txt avšak samotný soubor byl bez jakékoliv koncovky.

Libour

Přidáno: 02.12.16 13:32

Dobrý den, chci se zeptat jak vytisknu pojmenovanou oblast do PDF? Díky


Přidání nového komentáře

Poznámka: Z časových důvodu není v mých sílách zodpovědět všechny dotazy. Děkuji za pochopení.




(vlož číslo padesátpět)

Z bezpečnostních důvodu dočasně nemůžete použít HTML značky, kromě <code> a </code> (pro vkládání VBA kódu). Děkuji za pochopení.
Děkuji, za Vaše komentáře.

Za obsah komentářů neodpovídám, jelikož jsou komentáře publikovány ihned po jejich napsání čtenářem. Toto nemohu nijak ovlivnit. Přesto si vyhrazuji možnost jakýkoli neslušný komentář smazat bez udání důvodu. V komentářích si tykáme. ;-)






Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Newsletter

Přihlaste se odběru novinek a získejte:
Ebook zdarma -
10 kroků ke zvládnutí (Word, Excel, PowerPoint)
Šipka Kniha 3D Více o ebooku ...

TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2016 | 27123

Tento web zatím neprošel jazykovou korekturou. Beta verze redakčního systému.