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

Styra word utskrift via Excel vba

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

Dela detta inlägg


Länk till inlägg
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

 

Dela detta inlägg


Länk till inlägg
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?

Dela detta inlägg


Länk till inlägg
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?

Dela detta inlägg


Länk till inlägg
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!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Samma reservation som alla andra. Jag har ingen aning om vad jag talar om...

 

Hur väljer du skrivare? Är det något i  stil med:

Application.ActivePrinter

 

Vad händer om du pekar på Word lite hårdare när du väljer skrivare? Typ:

Word.application.ActivePrinter

eller

objWord.ActivePrinter

Dela detta inlägg


Länk till inlägg
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

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

 

 

Dela detta inlägg


Länk till inlägg
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!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...