excel Tisk vybraných stránek

Programy pro práci s textem, tabulkami, prezentacemi

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod koudyxxx 1. 3. 2010 02:11

Dobrý den mám takový problem dokázal by někdo udělat macro pro tisk stránek z jiného listu vypsaných v buňkách. Např v listu 1 bu v buňkách napsáno např. A1=4;A2=6;A3=8 a po spuštění makra mi to vytiskne z listu 2 strany napsaný v buňkách v listu 1. To znamena že budou vytisknuty z listu 2 strany 4,6,8. Není někdo jak vytvorit tento skript?
koudyxxx
Kolemjdoucí

Odeslat příspěvekod petrfilipi 1. 3. 2010 10:07

Dobrý den,

nebude to asi nejčistší programátorské řešení, ale je asi plně funkční:
1. Doporučuji to zkoušet na nějaké PDFkové tiskárně
2. Vytvořil jsem List1, kde jsem zapsal do A1 2, do A2 4 a do A3 7
3. Vytvořil jsem List2, kde jsem napsal 1, 2 a natáhl to tak daleko, abych získal nějaká data k tisku
4. Hlavní část kódu jsem si vytvořil tak, že jsem si spustil záznam makra a dal vytisknout 1. stránku Listu2. Tím jsem dospěl k tomu, že tisk na moji tiskárnu se provádí pomocí příkazu:
Application.ActivePrinter = "HP LaserJet M1522 MFP Series PCL 6 na Ne02:"
ExecuteExcel4Macro _
"PRINT(2,1,1,1,,,,,,,,2,""HP LaserJet M1522 MFP Series PCL 6 na Ne02:"",,TRUE,,FALSE)"
5. Teď už jde jen to to, že v příkazu Print je nejdříve číslo 2 (nevím, co to je), pak je tisk-od, pak je tisk-do, pak je počet kopií, pak jsou čárky atd. Takže tisk třetí až čtvrté stránky, 5 kopií, se provede příkazem
Application.ActivePrinter = "HP LaserJet M1522 MFP Series PCL 6 na Ne02:"
ExecuteExcel4Macro _
"PRINT(2,3,4,5,,,,,,,,2,""HP LaserJet M1522 MFP Series PCL 6 na Ne02:"",,TRUE,,FALSE)"
6. Teď už jde jen o to, že je potřeba do příkazu "docpat" vlastní proměnné. Takže jsem si nadefinoval tyto proměnné:
odkud = list1.cells(1,1)
kam = list1.cells(1,1)
prikaz_konec = ",5,,,,,,,,2,""pdfFactory Pro na FPP3:"",,,,FALSE)"
7. Samotný příkaz k tisku pak sestavím spojením těchto proměnných:
prikaz = "PRINT(2," + CStr(odkud) + "," + CStr(kam) + prikaz_konec
8. No a pak následuje už jen upravený příkaz k tisku:
Application.ActivePrinter = "HP LaserJet M1522 MFP Series PCL 6 na Ne02:"
ExecuteExcel4Macro _
prikaz
9. Celé to pak ještě spouštím v cyklu 1..100 a kontroluji, zdali je obsah buňky jiný než Empty. Když je Empty, program skáče na konec. Asi by bylo možné použít jiný cyklus, ale nějak ty cykly VBA neumím.

Kdyby něco, ozvěte se. Je to jen příklad, protože konkrétní program musí odpovídat Vaší tiskárně apod.
Petr Filipi
petrfilipi
Junior

Odeslat příspěvekod obcasny_navstevnik 1. 3. 2010 10:44

Pro tisk stranek je urcujici nastaveni ve vzhledu stranky, zejmane poradi stran pri tisku (svisle a pak vodorovne nebo vodorovne a pak svisle), pro vlastni tisk lze pouzit nasledujici proceduru, po spusteni si vyzada vyber oblasti bunek s cisly stran pro tisk (muze byt na jinem listu nez je vybrany list pro tisk) a z aktivniho okna pak vytiskne stranky:
Kód: Vybrat vše
Option Explicit

Sub SelectionPrintOut()
  Dim BlkPO As Range, Cll As Range
  On Error Resume Next
  Set BlkPO = Application.InputBox("Vyber oblast bunek s cisly stranek pro tisk" & vbCr _
      & "tazenim mysi nebo vepsanim", Type:=8)
  If Err.Number <> 0 Then Exit Sub
  For Each Cll In BlkPO.Cells
    With Cll
      ActiveWindow.SelectedSheets.PrintOut From:=.Value, To:=.Value, Copies:=1, Preview _
          :=False, Collate:=True
    End With
  Next Cll
  Set BlkPO = Nothing
  Set Cll = Nothing
End Sub

Pro nahled pri overeni zmen parametr Preview na False
obcasny_navstevnik
Junior

Odeslat příspěvekod koudyxxx 1. 3. 2010 12:08

Ano rozumim ale ja bych spis potřeboval makro které tiskne ne stranky od od jako je v druhém příspěvku ale stránky nadefinovane v zadaných buňkách a aby se to vytisklo vše najednou. Tím myslim aby to bylo jako jedna tisková uloha a ne např Tři úlohy aby mi to vytisklo např. strany 3,5,8 tak by to slo udělat postupně jako v prvním příspěvku že bych zadával např tisk strany od3 do 3 pak od5 do 5 a nakonec od 8 do 8. jenže v tomto případě budou 3 tiskové úlohy a ja potřebuju jen jednu protože to tisknu do PDF a příjde mi zbytečné pak přes jine programy tyto pdf zas spojovat :(. nevíte někdo jak to tedy vytvořit aby mi to vytisklo tedy zadané strany z listu 2 v kde stránky které chci vytisknout jsou v buňkách A1 A2 A3 na listu 1. Šlo by to udělat zpusobem který jsem výše psal pokud tedy víte jak dojít k tomu aby mi to vytisklo do 1 souboru. Děkuji
koudyxxx
Kolemjdoucí

Odeslat příspěvekod petrfilipi 1. 3. 2010 20:54

Dobrý den.
Tady je moje výsledné makro. Vy si jen podle výše popsaného postupu musíte zjistit, jak se jmenuje Vaše tiskárna. Moje se jmenuje pdfFactory Pro na FPP3. Tiskne to sice od-do, ale když je od=do, tak to tiskne jen konkrétní stránku. Já jsem to před chvilkou zkoušel, funguje to, udělá to jednu úlohu a do jednoho pdf souboru to připraví k uložení tolik stránek, kolik jich je v listu1 v sloupci A (max. 100). Ještě malé upozornění - aby to fungovalo, musí být otevřený ten list, z kterého chci tisknout data (tedy ne ten list, kde mám čísla stránek). V příloze jsem chtěl zaslat celý excelovský soubor, ale ani rar, ani zip, ani xls nejsou povolené přílohy.
Petr Filipi

Sub Makro1()
'
For i = 1 To 100
If List1.Cells(i, 1) <> Empty Then
odkud = List1.Cells(i, 1)
kam = List1.Cells(i, 1)
prikaz_konec = ",1,,,,,,,,2,""pdfFactory Pro na FPP3:"",,,,FALSE)"
prikaz = "PRINT(2," + CStr(odkud) + "," + CStr(kam) + prikaz_konec

Application.ActivePrinter = "pdfFactory Pro na FPP3:"
ExecuteExcel4Macro _
prikaz

End If
Next i
End Sub
petrfilipi
Junior

Odeslat příspěvekod koudyxxx 1. 3. 2010 23:30

Ok to bude asi ono teď už mám jen opravdu banální problém. hazí mi to chybu s tiskárnou asi to tam mám blbě zapsané. Viz obrázek
Co mám tedy špatně? hází mi to chybu viz další obrázek
Přílohy
chyba.png
asdfghjkl.png
asdfghjkl.png (39.29 ) Zobrazeno 5361 krát
koudyxxx
Kolemjdoucí

Odeslat příspěvekod petrfilipi 2. 3. 2010 07:36

Dobrý den.
Musíte si nechat zaznamenat makro, pak ho otevřít a podívat se, jak se ta tiskárna přesně jmenuje v tom makru. Já mám office 2007 a makro zaznamenám takto:
1. Navolte jako výchozí tiskárnu nějakou fyzickou tiskárnu.
2. Spusťte Excel a vyplňte nějaké buňky, ať je co tisknout.
3. Klikněte na Zobrazení, Makra, Záznam Makra.
4. Název nechte klidně na Makro1 a stiskněte OK.
5. Teď dejte na své PDFkové tiskárně tento dokument vytisknout. Jakmile se uloží, klikněte na Zobrazit, Makra, Zastavit záznam
6. Stiskněte Alt+F8, aby se zobrazil dialog pro výběr makra.
7. Označte vaše makro a klikněte na Upravit.
8. Teď vidíte, jak se PDFková tiskárna jmenuje. Zkopírujte to do mého makra a je to.

Petr Filipi
petrfilipi
Junior

Odeslat příspěvekod koudyxxx 2. 3. 2010 11:22

Děkuji mockrát, byli s tim stejně problémy tak jsem si stahl ten program co máte vy a vše v pořádku.musej jsem to ještě trochu upravit protože když jsem šel na jiný počítač tak se mi měnil konec nazvu tiskárny tak jsem to vyřeši že si nejdřív vyberu tiskárnu a pak spustim makro. vytiskne se to tedy ve zrovna nastavené tiskárně.

Kód: Vybrat vše
Sub Makro1()
'
For i = 1 To 100
If List1.Cells(i, 1) <> Empty Then
odkud = List1.Cells(i, 1)
kam = List1.Cells(i, 1)
prikaz_konec = ",1,,,,,,,,2,,,,,FALSE)"
prikaz = "PRINT(2," + CStr(odkud) + "," + CStr(kam) + prikaz_konec


ExecuteExcel4Macro _
prikaz

End If
Next i
End Sub


Děkuji mockrát za ochotu ;)
koudyxxx
Kolemjdoucí

Odeslat příspěvekod koudyxxx 20. 4. 2010 10:23

Dobrý den, mám dálší problém, kolegů tento skript nefunguje pravděpodobně protože mají office 2003 a tan asi nepodporuje některé příkazy. existuje nějaký ekvivalent k tisku pro 2003 popřípadě verzi 2000 a XP? děkuji mnohokrát. chyba konkrétně vznika ve skriptu u řádku kde je napsáno ExecuteExcel4Macro. A to je ten problé starší verze ho nepodporuji
koudyxxx
Kolemjdoucí

Odeslat příspěvekod petrfilipi 27. 4. 2010 14:10

Zkuste zaznamenat makro na tom stroji, kde to nefunguje a omrkněte, jak bude takové makro vypadat a pak tam jen doplňte ty proměnné odkud a kam, případně počet listů k vytištění. Zkusím to doma, tam mám Office 2003.

Petr Filipi
petrfilipi
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků