Just nu i M3-nätverket
Gå till innehåll

Styra word utskrift via Excel vba


Tommy H

Rekommendera Poster

Jag behöver skriva ut ett word dokument men det skall skrivas ut på en annan skrivare än standardskrivaren.

Hur byter jag skrivare för word?

 

Dim objWord As Object
    Set objWord = CreateObject("Word.application")
    objWord.Documents.Open Filename:="r:\anbud\ica.doc"
    objWord.Visible = True
    objWord.Application.PrintOut

 

Trots att jag kanändra skrivaen i Excel så förs ju inte det över till word utan där ligger standardskrivaren kvar.

/Tommy

Länk till kommentar
Dela på andra webbplatser

Ber om ursäkt för att jag hoppar in en tråd som handlar om något jag inte behärskar.

Fick en tanke bara:

Går det inte att via vba byta standardskrivare, skriva ut, byta (tillbaks) standardskrivare?

 

Tydligen kan man byta via kommandotolken:

https://community.spiceworks.com/how_to/2564-how-to-set-the-default-printer-via-command-line-prompt

 

Länk till kommentar
Dela på andra webbplatser

Mja, jag vill ju kunna styra det via vba-koden i Excel, och det är väl inte riktigt denna lösningen?

Länk till kommentar
Dela på andra webbplatser

Går det inte att peta in rader i din kod som byter standardskrivare någonstans innan

objWord.Application.PrintOut

och sedan efteråt byter standardskrivare igen?

Länk till kommentar
Dela på andra webbplatser

Jo, det går och det har jag gjort, men ändringen av skrivare når inte Word utan påverkar endast Excel.

Det innebär att kollar jag i koden så har jag rätt skrivare, men när Word dokumentet öppnas så ligger standardskrivaren kvar i Word.

Jag når inte fram till att ändra den i Word som sagt!

Länk till kommentar
Dela på andra webbplatser

Det är ju ett krångligt makro eftersom jag behöver kolla igenom vilken port mina resp. skrivare ligger på, men så här ser det ut!

 

  Dim NetWork As Variant
  Dim X As Integer
  myprinter = "SKR-MMX-64-A4-Färg-ohålad"

  NetWork = Array("Ne00:", "Ne01:", "Ne02:", "Ne03:", "Ne04:", _
                   "Ne05:", "Ne06:", "Ne07:", "Ne08:", _
                   "Ne09:", "Ne10:", "Ne11:", "Ne12:", _
                   "Ne13:", "Ne14:", "Ne15:", "Ne16:", _
                   "LPT1:", "LPT2:", "File:", "SMC100:")
  X = 0
TryAgain:
  On Error Resume Next
  Application.ActivePrinter = myprinter & " på " & NetWork(X)
  If Err.Number <> 0 And X < 16 Then
    X = X + 1
    GoTo TryAgain
  ElseIf Err.Number <> 0 And X > 15 Then
    GoTo PrtError
  End If
  On Error GoTo 0
  NetworkPrinter = myprinter & " på " & NetWork(X)
      Application.ActivePrinter = NetworkPrinter

'här kan jag se att jag har rätt skrivare!

    Dim objDoc
    Set objWord = CreateObject("Word.Application")
    Set objDoc = objWord.Documents.Open("R:\Anbud.docx")

    objWord.Visible = True
    objWord.PrintOut

 

Ditt förslag om att styra Word hårdare har jag inte testat ännu!

Ska kolla det efter lunch

Länk till kommentar
Dela på andra webbplatser

2 timmar sedan, skrev Tommy H:

Det innebär att kollar jag i koden så har jag rätt skrivare, men när Word dokumentet öppnas så ligger standardskrivaren kvar i Word.

Jag når inte fram till att ändra den i Word som sagt!

Om du i kod bara byter standardskrivare, från ex. "laser" till "bläckstråle" och stoppar där för att sedan öppna notepad och skriver ut något, skrivs det då inte ut på "bläckstråle"?

Kanske måste bytet av standardskrivare ske allra först innan något anrop till Word sker?

 

Påminner om att jag inte kan VBA.

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Problemet med Application.ActivePrinter är att metoden endast styr standardskrivare såsom Excel självt ser det, inte i Windows som du behöver ändra i ditt fall. Använd istället kod som bygger på följande exempel:

Sub Test()

    CreateObject("WScript.Network").SetDefaultPrinter "Microsoft Print to PDF"

End Sub

Du får förstås ändra strängvariabeln till vad som gäller för dig, och efteråt ställa tillbaka standardskrivaren till önskat utgångsläge.

 

Lite läsvärt om hur du kan lista upp skrivarna och lagra i matris alternativt låta användaren välja skrivare i en lista;

Listing Printers In VBA / Chip Pearson

 

 

Länk till kommentar
Dela på andra webbplatser

Jag testade även med Mikael63's tanke om att lägga skrivarbytet före Word-koderna, och det verkade också fungera!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...