• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA Printer selecteren en pinterinstellingen

Status
Niet open voor verdere reacties.
Hoi Lex,

Mocht het bovenstaande allemaal niet helpen, maak dan voor elke printer een aparte sheet, met daar in de printerinstellingen en dus ook een eigen macrootje. Dus dan krijg je bijvoorbeeld "Sheet1-Canon", "Sheet2-HP'. Ik weet dat dit niet een nette oplossing is, maar als je het af en toe ff niet weet, gebruik je dit soort oplossingen tot je iets beters vind/bedenkt.
Overigens gebruik ik ook de macro die Alphamax hierboven zet, deze werkt feilloos op mijn bedrijf waar we met veel verschillende printers werken.
 
Erg fijn dat ik code ontvangen, die ben ik meteen gaan testen, maar.....
sinds het probleem met de wachrij ben ik in een soort van de regen naar de drup gegaan.
Het is momenteel een zeer hardnekkig probleem, er ontstaan steeds een nieuwe wachtrij, tekens na een nieuwe print, ondanks dat alles is geleegd.

Wat heb ik gedaan:
ik heb de print spooler stop gezet
ik heb de map %windir%\System32\spool\PRINTERS geleegd -> dat lukt deel, er blijft steeds een bestand in staan, met extensie TMP.
Ik heb de printer uitgezet en van het stroom afgehaald voor minstens een minuut.
Ik heb de PC opnieuw opgestart.
Ik heb vervolgens in de map %windir%\System32\spool\PRINTERS het TMP bestand kunnen verwijderen.
Alles lijkt dan weer correct, printspooler weer aan, printmap leeg, wachtrij weg.
Alles correct.
Dan even een willekeurig printje maken, niets met een macro of zoiets -> hij print netjes....maar er ontstaat weer een wachtrij van hetzelfde document dat ik net heb geprint.
Dan weer het hele riedeltje opnieuw....maar steeds weer het TMP bestandje.

Inmiddels dus echt iets fout met de printer, veroorzaakt door een macro.

Dan jouw code:
die heb ik geprobeerd: ->
stuurt netjes naar de printer, maar zonder instellingen, print in portrait bijvoorbeeld én gaat ook niet terug naar de default printer.
Er zit dus iets niet goed in die macro. Maar ik kan niet lekker testen, want moet telkens het printerprobleem weer oplossen.
pfff......
 
Inmiddels heb ik noodgedwongen de usb aangesloten printer moeten verwijderen en zal ik voorlopig niet meer in gebruik nemen vanwege de problemen met de telkens terugkerende wachtrij.
Het probleem gebeurt ook alleen maar met deze printer (HP PageWide Pro 477dw MFP), als usb aangesloten.
Als ik print op dezelfde printer, maar dan via het netwerk (Lex-kantoor-(HP PageWide Pro 477dw MFP)) of een andere printer, dan heb ik dat probleem van die wachtrij niet.
Er is dus op één of andere manier sinds die macro iets ingeslopen, dat er niet meer uit kan. Erg vervelend, ook omdat het bijna maadagochtend is!!

Dus de test met de macro gaat voorlopig verder met dezelfde, maar dan netwerk aangesloten printer.

Wat er fout is in de aangereikte code is dat jullie aannemen dat de actieve printer de default printer is, maar dat klopt niet.

Dim strCurrentPrinter As String
strCurrentPrinter = Application.ActivePrinter ' huidige printer bewaren
gevolgd door aan het einde:
Application.ActivePrinter = strCurrentPrinter 'huidige printer terugzetten

De situatie is namelijk dat de laatste print mogelijk gedaan is op een andere dan de default printer.

Dus hoe wordt de code als ik wil hebben:

Zet de default printer (dus niet de actieve printer) in het geheugen
Activeer de gewenste printer "Lex-kantoor-(HP PageWide Pro 477dw MFP) op Ne03:"
Print 1 copie (bijvoorbeeld in landscape)
Zet weer terug naar de default printer met default print instellingen
 
Nieuwe code, kan je deze proberen met de usb-printer en de netwerk printer?

ExecuteExcel4Macro "PAGE.SETUP... is een oude manier van pagina's instellen, maar wel veel sneller dan .PageSetup.
Hiermee zou de wachtrij korter moeten worden.

Ik heb voor jou nieuwe code geschreven die een string ophaalt van de defaultprinter met de juiste poort, onafhankelijk van de taal.

Code:
Option Explicit

Public Sub testprint2()

    Dim sDefaultPrinterNameAndPort As String

    Dim strDefaultPrinter As String

    sDefaultPrinterNameAndPort = GetDefaultPrinterNameAndPort

    Application.ActivePrinter = "HP PageWide Pro 477dw MFP op Ne04:"

    If Val(Application.Version) >= 14 Then    'vanaf excel2010
        Application.PrintCommunication = True
    End If
    '    With ActiveSheet.PageSetup
    '        .Orientation = xlLandscape
    '        .Draft = False
    '        .PaperSize = xlPaperA4
    '        .Order = xlDownThenOver
    '        .BlackAndWhite = False
    '        .Zoom = 100
    '    End With

    '    PAGE.SETUP(head, foot, left, right, top, bot, hdng, grid, h_cntr, v_cntr, orient, paper_size, scale, pg_num, pg_order, bw_cells, quality, head_margin, foot_margin, notes, draft)
    ExecuteExcel4Macro "PAGE.SETUP(, , , , , , , , , , 2, 9, , , 2, , , , , , )"    ' 2 = landscape, 9 = A4,2=  Left-to-right, then down

    Selection.PrintOut Copies:=1, Collate:=True

    Application.ActivePrinter = sDefaultPrinterNameAndPort    'huidige printer terugzetten

End Sub

Private Function GetDefaultPrinterNameAndPort()    'am_2020

    Const HKEY_CURRENT_USER = &H80000001

    Dim aON As Variant
    Dim sDefaultPrinterName As String
    Dim sDefaultPrinterPort As String
    Dim sKeyPath As String
    Dim sOn As String
    Dim sValue As String

    sKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"

    With CreateObject("WbemScripting.SWbemLocator")
        sDefaultPrinterName = .ConnectServer(".", "root\cimv2").ExecQuery("Select * from Win32_Printer Where Default = True").ItemIndex(0).Name
        aON = Split(Application.ActivePrinter, " ")
        sOn = aON(UBound(aON) - 1)
        .ConnectServer(".", "root\default").Get("stdregprov").GetStringValue HKEY_CURRENT_USER, sKeyPath, sDefaultPrinterName, sValue
        sDefaultPrinterPort = Mid$(sValue, 10, 5)
    End With

    GetDefaultPrinterNameAndPort = sDefaultPrinterName & " " & sOn & " " & sDefaultPrinterPort

End Function
 
Laatst bewerkt:
Dank zeg, voor deze hulp, erg fijn.

Ik had, dankzij al jullie hulp, de macro eindelijk werkende, maar nogal traag.
Ik kan nog wat overbodige code eruit halen.
Dit is me uiteindelijk gelukt door die usb printer af te koppelen, hetgeen me hoofdbrekens heeft gekost.
Dus het werkt nu op dezelfde, maar dan netwerk aangesloten printer.

Ik ga jouw aangereikte code ook nog uitproberen, kijken of dit beter/sneller werkt.
Of ik de printer nog usb aansluit, dat weet ik nog niet. Dat heeft me echt enorm veel problemen en tijd gekost en nooit tot een oplossing geleid.

Dank in ieder geval en ik kom nog terug met resultaten van het testen van de code.
 
Het testen met de voorgestelde code brengt nog niet het gewenste resultaat.
Maar met mijn eigen code, mede door jullie hulp tot stand gekomen, waarbij ik flink gesneden heb in de code, loopt de macro redelijk goed, ik ben er tevreden mee.
Voor mij is dit probleem nu opgelost.

Dank allen voor alle hulp
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan