Stránka 1 z 2

Tisk pomocí makra

Napsal: 31 kvě 2021 14:40
od luko02420
Dobrý den, potřeboval bych poradit, zda jde tisknout z excelu pomocí makra na tiskárnu, která není v systému nastavena jako výchozí.

Našel jsem makro od P. Lasaka, ale nějak mi to nefunguje. prosím o radu.
Děkuji

Kód: Vybrat vše

Sub tisk()


ActiveSheet.PrintOut From:=1, To:=100, Copise:=1, ActivePrinter:="ZDesigner GK420t na USB002", Collate:=True

End Sub

Re: Tisk pomocí makra

Napsal: 31 kvě 2021 14:48
od ITCrowd
A co konkrétně nefunguje?

Re: Tisk pomocí makra  Vyřešeno

Napsal: 31 kvě 2021 15:10
od luko02420
Tisk neproběhne a vypíše chybu
Run-time error 1004
Application -defined or object - defined error.

Re: Tisk pomocí makra

Napsal: 31 kvě 2021 15:15
od ITCrowd
To vypadá, jako by ten název nebyl korektní. Opsal jsi to dobře?

Re: Tisk pomocí makra

Napsal: 31 kvě 2021 23:18
od Grimm
Makro z odkazu vypíše nainstalované tiskárny do okna Immediate

https://wordmvp.com/FAQs/MacrosVBA/Avai ... inters.htm

Re: Tisk pomocí makra

Napsal: 01 čer 2021 06:30
od luko02420
Dobrý den, tak jsem zkoušel makro od Grimma, postupoval jsem podle návodu a makro se mi vůbec nespustí.
Už nevím co dělám špatně.

Tak jsem si nechal vyjet seznam tiskáren přes PowerShell a mám vše správně. A přesto mi to makro nejede. Tak už nevím.

Už jsem našel chybu v kódu ve slově Copies, už mi to tiskne ale pořád na výchozí tiskárnu

Re: Tisk pomocí makra

Napsal: 01 čer 2021 07:19
od ITCrowd
Tak jsem pohledal a dověděl jsem se, že VBA nelze tisknout na jinou tiskárnu, než na výchozí. Přesněji - ve woknech nejde tisknout na jinou tiskárnu žádným skriptem. Ani cmd, ani powershelem ani vbs.
Ve VBS to někdo řešil tak, že změnil výchozí tiskárnu na tu, která má tisknout, poslal na ni dokument a změnu vrátil zpět. Nemám ale tušení, zda by tohle fungovalo ve VBA. Pokud máš zájem, můžu zkusit to napsat.

Re: Tisk pomocí makra

Napsal: 01 čer 2021 08:29
od luko02420
Dobrý den, děkuji za informaci.
Pokud bude chtít něco zkusit napsat můžete, ale pokud jsi nejste jisty, že se to povede tak se na to vykašlete.
nechci Vás okrádat o čas.
Samozřejmě pokud by to fungovalo byl bych moc rád.

Re: Tisk pomocí makra

Napsal: 01 čer 2021 09:05
od ITCrowd
V pohodě. není to zas taková trága. Horší je donutit excel, aby akceptoval kód :-)

Kód: Vybrat vše

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Default = TRUE")

For Each objPrinter In colPrinters
    strOldDefault = objPrinter.Name
    strOldDefault = Replace(strOldDefault, "\", "\\")
Next

Set colPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Name = 'PDFCreator'")
   
For Each objPrinter In colPrinters
    objPrinter.SetDefaultPrinter
Next

Application.Wait (Now + TimeValue("0:00:02"))

' Sem doplň příkaz k tisku

Set colPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Name = '" & strOldDefault & "'")

For Each objPrinter In colPrinters
    objPrinter.SetDefaultPrinter
Next

Set objWMIService = Nothing
Set colPrinters = Nothing



Co to dělá?
Načte výchozí tiskárnu. Uloží ji do proměnné strOldDefault. (replace je zapotřebí pro konverzi jména v případě že by výchozí tiskárna byla síťová).
Vyhledá podle jména požadovanou tiskárnu. Zde je to PDFCreator. Místo PDFCreator si doplníš svou tiskárnu.
Tuto tiskárnu nastaví jako výchozí.
Počká 2 sec (pro jistotu, aby měl systém čas udělat změny).
Následuje příkaz k tisku, který si doplníš sám.
Vyhledá tiskárnu dle uloženého jména v proměnné strOldDefault
Nastaví ji jako výchozí (tak vrátí změnu zpět).
Toť vše.

Ověřeno na excelu2016, funguje. Jediná zrada by mohla být v mezerách ve jméně té další tiskárny. To ale řešit nehodlám, prostě si tu tiskárnu přejmenuj.

Re: Tisk pomocí makra

Napsal: 01 čer 2021 10:16
od elninoslov
No ja som to robil tak, že som si odložil aktuálnu tlačiareň, z nej som si vypreparoval predložku pred číslom portu (najdôležitejší krok, kvôli jazykovým mutáciám, napr. "na port", "on port", ...), z registru zobral názvy tlačiarní, zložil správny názov tlačiareň+predložka+port a nastavil ako východziu. Vytlačil a vrátil predchádzajúcu. Niekde to snáď nájdem.

Re: Tisk pomocí makra

Napsal: 01 čer 2021 10:25
od luko02420
Tak to je bomba, funguje skvěle, tiskárnu jsem přejmenoval.
Děkuji moc za ochotu.
ještě počkám jestli najde kód mistr Elninoslov a po té zamknu.
Vcelku by mě to zajímalo.
Díky všem

Re: Tisk pomocí makra

Napsal: 01 čer 2021 10:38
od ITCrowd
elninoslov: Myslím, že proto se nemusí chodit do registru. Název tiskárny se dá najít skriptem, a pak je třeba ošetřit ty mezery buď zdvojenými uvozovkami (analogie s replace "\", "\\"), popřípadě použít chr(32).
To ovšem za předpokladu, že by ty mezery vadily. Podle mě by nemusely, ale všechno je možné.

Dodatečně přidáno po 33 minutách 16 vteřinách:
Tak ve vbs to mezery akceptuje bez problémů.