< návrat zpět
MS Excel
Téma: Tisk makrem na síťovou tiskárnu a formulář
Zaslal/a hnizdo.1 17.7.2018 18:37
Zdravím,
potřeboval bych tisknout na síťovou tiskárnu, na uživatelsky definovaný formulář (resp. rozměr - nastaveno v tiskovém serveru ve správci tiskáren).
Problém je, že to potřebuji rozjet z různých počítačů v síťi.
Jediné,co mě zatím napadlo, je před tiskem použít následné:
If Worksheets("Tisk").Cells(12, 4) = "PC1" Then
Application.ActivePrinter = "Jehlicka na Ne05:"
Worksheets("Tisk").PageSetup.PaperSize = 163
End If
If Worksheets("Tisk").Cells(12, 4) = "PC2" Then
Application.ActivePrinter = "Jehlicka na Ne04:"
Worksheets("Tisk").PageSetup.PaperSize = 190
End If
If Worksheets("Tisk").Cells(12, 4) = "PC3" Then
Application.ActivePrinter = "Jehlicka na Ne04:"
Worksheets("Tisk").PageSetup.PaperSize = 186
End If
If Worksheets("Tisk").Cells(12, 4) = "PC4" Then
Application.ActivePrinter = "Jehlicka na Ne06:"
Worksheets("Tisk").PageSetup.PaperSize = 192
End If
If Worksheets("Tisk").Cells(12, 4) = "PC5" Then
Application.ActivePrinter = "Jehlicka na Ne06:"
Worksheets("Tisk").PageSetup.PaperSize = 192
End If
Adresace síťové tiskárny i adresace velikosti papíru se totiž pro potřeby makra na každém PC liší, i když název tiskárny i tiskového formuláře je všude zadán totožný. Název tiskového formuláře je "Stitek", název tiskárny "Jehlicka", v buňce D12 je uvedena identifikace konkrétního PC.
Takto to funguje (vyjma Excel 2002, nevím proč), ale potřeboval bych poradit, jak to udělat, aby tisk fungoval z jakéhokoliv PC vždy stejně (tedy například nějakou jinou adresací tiskárny a formuláře/velikosti papíru). Výše uvedené je totiž celkem prasácké a nesystémové řešení. Aby to nebylo úplně jednoduché, jedná se o různé OS (W7 a W10) a různé verze Excel (2002,2007, 2010).
Díky za případné návrhy.
eLCHa(18.7.2018 12:13)#040925 Vyhledávání seznamu tiskáren a pak konkrétní z nich lze - lze to například pomocí API. Já si osobně myslím, že v jednoduchosti je síla a to co máte je srozumitelné a jednoduché. Problém může nastat u toho dodatku (na Ne
XX)- pokud se ale nepřeinstalovává, nemuselo by to vadit. Rozhodně je jednodušší opravit to v buňce než v kódu.
Místo toho PC
X na listu Tisk vyplňte 2 buňky - ActivePrinter a PaperSize. Pak nepotřebujete tolikrát If - stačí natáhnout konkrétní hodnoty.
Na každém PC pak nastavíte požadované hodnoty.
Co se týče 2002 - nevím jestli vám tu bude ještě někdo schopen pomoci. Krokujte kód pomocí F8 a zjistěte konkrétně, co nefunguje.
citovat
xlnc(18.7.2018 14:42)#040928 Jen drobnosti - ne If..Then, ale Select..Case, na listu roletka s výběrem (Data/Oveření, Seznam), nějaký SVYHLEDAT a ende. Jinak k tiskárnám má pod VBA možná blíž tzv. WMI.
citovat
hnizdo.1(29.8.2018 14:51)#041337 eLCHa napsal/a:
Vyhledávání seznamu tiskáren a pak konkrétní z nich lze - lze to například pomocí API. Já si osobně myslím, že v jednoduchosti je síla a to co máte je srozumitelné a jednoduché. Problém může nastat u toho dodatku (na NeXX)- pokud se ale nepřeinstalovává, nemuselo by to vadit. Rozhodně je jednodušší opravit to v buňce než v kódu.
Místo toho PCX na listu Tisk vyplňte 2 buňky - ActivePrinter a PaperSize. Pak nepotřebujete tolikrát If - stačí natáhnout konkrétní hodnoty.
Na každém PC pak nastavíte požadované hodnoty.
Co se týče 2002 - nevím jestli vám tu bude ještě někdo schopen pomoci. Krokujte kód pomocí F8 a zjistěte konkrétně, co nefunguje.
Tak problém s "NeXX" nakonec nastal. Na dvou strojích se totiž neustále mění. Nechápu, že nelze "adresovat" tiskárnu pouze názvem - na všech strojích se prostě jmenuje "Jehlicka", stejně tak tiskový formulář je všude nazván stejně. Proč ve VBA kódu musí být jakýsi dodatek, který znemožňuje tisk na jiném stroji (na některých strojích bohužel i po restartu) mi zatím nikdo nebyl schopen vysvětlit.
Potřeboval bych nějaké univerzální řešení, které bude fungovat nezávisle na stroji.
citovat