07. marts 2018 - 11:49Der er
7 kommentarer og 1 løsning
VBA - skifte standard-printer
Hej findes der virkelig ikke en mulighed for, at man kan skifte ActivePrinter vha. af variabel? Se nedennævnte kode - har opretter to printere, hvor den ene navnemæssigt slutter på "F" - og den virker.
På forhånd tak ;-)
Public Sub PrintFarve(control As IRibbonControl) Dim sCurrentPrinter As String Dim sNewPrinter As String
sCurrentPrinter = Application.ActivePrinter
sCurrentPrinter = Right(STDprinter, 1) If sCurrentPrinter <> "F" Then Application.ActivePrinter = Application.ActivePrinter & "F"
Så vidt jeg kan se er der flere problemer i din kode:
1) Hvad er formålet med at have ”(control As IRibbonControl)”?
2) Du bruger STDprinter, men det fremgår ikke af koden, hvad STDprinter er.
3) Du ændrer værdi af sCurrentPrinter fra priternavnet til kun at indeholde sidste tegn af STDprinter, og senere sætter du den aktive printer til at have denne værdi (kun ét tegn - ikke det oprindelige printernavn).
4) Du tildeler ikke på noget tidspunkt en værdi til sNewPrinter. Når du bruger den som printernavn, er navnet en tom streng.
Hvis du ikke kan være 100 % sikker på, at der er adgang til en printer med navnet på den aktive printer + F (eller STDprinter + F, hvis det var den, du ville bruge), skal du indbygge fejlhåndtering (brugeren kunne måske senest have haft valgt en anden printer end den, du forventer).
Måske det er noget i retning af nedenstående, du ville have lavet. Da jeg ikke kan vide, om det er en fejl, at du brugte STDprinter i din kode eller hvor værdien af STDprinter ellers kommer fra, er det muligt, at du skal ændre noget:
-------------MAKRO VERSION 1-------------
Public Sub PrintFarve() Dim sCurrentPrinter As String Dim sNewPrinter As String
sCurrentPrinter = Application.ActivePrinter
'hvis sidste tegn i printernavnet IKKE er "F", 'så sæt sNewPrinter til sCurrentPrinter + F If Right(sCurrentPrinter, 1) <> "F" Then sNewPrinter = sCurrentPrinter & "F"
Application.ActivePrinter = sNewPrinter
ActiveDocument.PrintOut
'sæt printer tilbage til den oprindelige Application.ActivePrinter = sCurrentPrinter Else 'farveprinter var allerede valgt - ingen ændringer nødvendige ActiveDocument.PrintOut End If End Sub
--------------------------- Men du kan reelt undlade at tildele farveprinterens navn til en variabel, da du kun skal bruge navnet den ene gang. Så kan det kortes ned til dette:
-------------MAKRO VERSION 2-------------
Public Sub PrintFarve2() Dim sCurrentPrinter As String
sCurrentPrinter = Application.ActivePrinter
'hvis sidste tegn i printernavnet IKKE er "F", 'så sæt ActivePrinter til sCurrentPrinter + F If Right(sCurrentPrinter, 1) <> "F" Then Application.ActivePrinter = sCurrentPrinter & "F"
ActiveDocument.PrintOut
'sæt printer tilbage til den oprindelige Application.ActivePrinter = sCurrentPrinter Else 'farveprinter var allerede valgt - ingen ændringer nødvendige ActiveDocument.PrintOut End If End Sub
Tusind tak for dit svar. Du må undskylde jeg ikke har fået ryddet nok op, da jeg har forsøgt forskellige ting.
1) IRibbonControl er fordi jeg har lavet en knap i Ribbon-menuen.
2) Jeg har prøvet at sætte din kode ind, båden den første og den anden, men de giver stadig samme fejl "Printerfejl" i det øjeblik jeg kommer til linjen
Application.ActivePrinter = sNewPrinter
Hvor Application.ActivePrinter viser den bestående netværksprinter og hvor sNewPrinter er den samme printer men farve-versionen.
Det er den rigtige printer - har endda sat selve printerstien ind, men det gav samme fejl. Nu skal det selvfølgelig siges, at printeren er en netværksprinter - som har følgende sti: \\B5133S03\CTX65AK_BDD643
Hvilket err.number får du? Og hvilken err.description?
Jeg kan jo ikke teste, da jeg ikke har dine printere. Din kode forudsætter, at printernavnene er ens kun med den forskel, at farveprinteren har et ekstra ”F” til sidst.
Prøv at hente VBA-koden på denne side og brug den til at finde printernavnene.
Tusind tak så vidt, det nederste link vil jeg prøve i morgen, når jeg kommer på arbejde igen. Det første link har jeg allerede testet i dag - og det viste de korrekte navne.
Velbekomme. Det var godt, at det lykkedes. Hvis du markerer mit svar med de to links som et svar, kan det måske hjælpe andre på et tidspunkt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.