• 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.

Via VBA printer activeren

Status
Niet open voor verdere reacties.

Vieri

Gebruiker
Lid geworden
12 jan 2013
Berichten
64
Hallo,

ik durf geen nieuwe thread aan te maken, omdat ik hier en daar soortgelijke vraagstelling zie staan, maar uiteindelijk dekken de antwoorden niet de gehele lading.

Ik heb een probleem dat ik vanuit Excel een printopdracht uitstuur naar een labelprinter alleen zet ik via mijn macro de labelprinter als standaard voor het document. Als de gebruiker vanaf een andere tab wil printen (na een printactie met de labelprinter) dan wordt opnieuw de labelprinter aangesproken i.p.v. de default printer met A4 papier.

Dit is de code:
Code:
Sub ZD620_2()
Worksheets("labels Zebra").PrintOut _
                      from:=1, _
                      to:=2, _
                      Copies:=1, _
                      ActivePrinter:="ZDesigner ZD620-203dpi ZPL"

End Sub

Dit heb ik gewijzigd naar: (bedankt voor het bestand 'helpmij printer poort activeprinter'!!)
Code:
Sub ZD620_1()
Dim strCurrentPrinter As String
strCurrentPrinter = Application.ActivePrinter ' stores the current active (default) printer

Application.ActivePrinter = "ZDesigner ZD620-203dpi ZPL op Ne02:"                 ' change what is in quotes as per appropriate printer name in the Print Dialog Box
        
    ActiveWindow.SelectedSheets.PrintOut from:=1, to:=2, Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False

Application.ActivePrinter = strCurrentPrinter 'Returns printer output to your default printer

End Sub

Door toepassing van activewindow hoef ik geen gebruik te maken van de tabnaam "labels zebra"? Ik denk dat de code werkt, want de standaard printer is gewoon zichtbaar bij de andere tabs na een printactie met de labelprinter (de labelprinter staat op mn werk en test dit nu thuis).

Zie ik iets over het hoofd? Bedankt alvast!
 
Zo zou ik het doen, ZD620_1 is jouw printmacro voor alle werkbladen.
De printer wordt alleen aangepast naar zebra wanneer de macro gestart is vanaf werkblad zebra

Code:
Public Sub ZD620_1()
    Dim strCurrentPrinter As String
    strCurrentPrinter = Application.ActivePrinter    ' stores the current active (default) printer
    If ActiveSheet.Name = "labels Zebra" Then
        strPrinter = "ZDesigner ZD620-203dpi ZPL op Ne02:"
    Else
        strPrinter = strCurrentPrinter
    End If
    ActiveSheet.PrintOut from:=1, to:=2, Copies:=1, ActivePrinter:=strPrinter, Collate:=True, IgnorePrintAreas:=False
    Application.ActivePrinter = strCurrentPrinter    'Returns printer output to your default printer
End Sub
 
Laatst bewerkt:
Bedankt voor je snelle antwoord!! Helaas heb ik nog andere werkbladen, bijvoorbeeld “labels zebra (2)” en “labels klant zebra” naast eerdergenoemde “labels zebra”. Daarnaast moet van het ene werkblad 1 pagina 1,2,3 of 4x geprint worden en van een ander werkblad pagina 1 en 2 samen en pagina 3 en 4 samen. Kan de macro dus niet als public inrichten, lijkt me?
 
Laatst bewerkt door een moderator:
Maak dan per werkblad een printmacro met een unieke naam, met de juiste printer en aantallen.
Deze kunnen evengoed public zijn, en je kan ze evengoed openen met een shape "print werkblad" op je werkblad (ik neem dat je zoiets hebt maar zonder voorbeeld bestandje is dat gissen).
 
Laatst bewerkt:
Ik kan dan uw public sub gebruiken en voor elk werkblad If ActiveSheet.Name = "labels Zebra" aanpassen met de daarbij behorende aantallen?
Helaas kan ik geen voorbeeld plaatsen i.v.m. bedrijfspolicy. Het bestand bevat vele tabs met veel bedrijfsinfo.
 
Laatst bewerkt door een moderator:
Ik print met bovenstaande op de default A4 printer en niet op de Zebra. Doe ik iets verkeerd?
 
Laatst bewerkt door een moderator:
Code:
ActiveSheet.Name = "labels Zebra"
dan is het werkblad niet "labels Zebra".

Een klein anoniem voorbeeldbestandje kan ook.
 
Laatst bewerkt:
Het werkblad heet LABELS ZEBRA. Hoofdlettergevoelig kennelijk (kan mezelf elke keer wel voor m'n hoofd slaan na ieder bezoek hier, maar wel steeds leerzaam :D)
 
Laatst bewerkt door een moderator:
Je had het al binnen 15minuten door ;)
 
Is het “op ne02:” printerportgedeelte altijd noodzakelijk om buiten de standaard ingestelde printer op een andere printer te kunnen printen via een macro?

Ik voorzie namelijk dat voor mijn Zebra labelprinter het “ne nummer” op het 2e werkstation anders kan zijn waardoor de macro op het 2e station niet zal werken. Is hier wellicht een workaround voor in de macro?

Of is dit ne nummer makkelijk handmatig te wisselen of valt dit steeds terug naar de origineel ingestelde waarde?
 
Vraag een eigen plek gegeven. Tevens 1088 onnodige quotes verwijderd. Als je direct reageert op een vraag hoef je niet te quoten.
 
Dit heb ik in een bestand in ThisWorkbook staan:
Code:
Private Sub Workbook_Open()
    printernaam = Application.Dialogs(xlDialogPrinterSetup).Show
End Sub

Daarmee kies ik bij het openen van het bestand een printer die op de betreffende PC beschikbaar is.
 
Thanks, dat is inderdaad ook een optie, maar er wordt met printknoppen gewerkt. De gebruiksvriendelijkheid is een enorm belangrijke factor
 
Laatst bewerkt door een moderator:
nummer 1089
T.a.v. Vieri: Of je gaat lezen of ik sluit het topic.
 
Excuus, opmerkingen écht niet gezien en dat gequote komt door mn leeftijd
 
Het ne portnummer voor de Zebra labelprinter is anders op het 2e werkstation wat als gevolg heeft dat de macro niet werkt vanaf dat 2e werkstation. Daarnaast heb ik begrepen dat de Ne poortnummers opnieuw geindexeerd worden als je welke verandering dan ook doet in de printersetup. Ik vraag me af of er een omweg is zonder toepassing van de ne poortnummers
 
De poort kan per PC verschillen
Maar is de naam van de printer ook op alle PC's ook "ZDesigner ZD620-203dpi ZPL"?
Zo ja dan zou je bij "ZDesigner ZD620-203dpi ZPL" de juiste "Ne" kunnen zoeken.
 
Laatst bewerkt:
Met onderstaande code kan je de string vinden die je nodig hebt voor activeprinter.
Onafhankelijk van de poorten op de PC en de taalinstellingen van de PC.
Zolang maar een "unieke" zoekstring gebruikt.

Code:
Option Explicit

Public Sub Main()

    Dim sPrinterNameAndPort

    sPrinterNameAndPort = FindPrinterNameAndPort("ZDesigner ZD620-203dpi")
    sPrinterNameAndPort = FindPrinterNameAndPort("ZDesigner")

    sPrinterNameAndPort = FindPrinterNameAndPort("Microsoft XPS")
    sPrinterNameAndPort = FindPrinterNameAndPort("Microsoft Print")
    sPrinterNameAndPort = FindPrinterNameAndPort("Fax")
    sPrinterNameAndPort = FindPrinterNameAndPort("OneNote for Windows")

End Sub

Private Function FindPrinterNameAndPort(sPrinter) As String

    Const HKEY_CURRENT_USER = &H80000001

    Dim aOn As Variant
    Dim aPrinter As Variant
    Dim aType As Variant
    Dim sKey As String
    Dim sOn As String
    Dim sPort As String
    Dim sValue As String
    Dim vPrinter As Variant

    FindPrinterNameAndPort = vbNullString

    sKey = "Software\Microsoft\Windows NT\CurrentVersion\Devices"

    aOn = Split(Application.ActivePrinter, " ")
    sOn = aOn(UBound(aOn) - 1)

    With GetObject("WINMGMTS:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
        .EnumValues HKEY_CURRENT_USER, sKey, aPrinter, aType
        For Each vPrinter In aPrinter
            If vPrinter Like (sPrinter & "*") Then
                .GetStringValue HKEY_CURRENT_USER, sKey, vPrinter, sValue
                sPort = Split(sValue, ",")(1)
                FindPrinterNameAndPort = vPrinter & " " & sOn & " " & sPort
            End If
        Next
    End With

End Function
 
Laatst bewerkt:
De printernaam is op beide werkstations hetzelfde. Ik heb gezien dat de “Ne” verschilt. De door u eerdere voorgestelde macro werkt subliem, maar dan zou elk werkstation een verschillend Excel bestand moeten gebruiken (waarin alleen de ‘Ne’ verschilt) wat niet wenselijk is (indien ik u goed begrijp mbt uw 1e reply deze morgen). Het Excel bestand wordt geopend van een gedeelde locatie zodat de gebruiker altijd de laatste versie heeft.

Voor uw 2e antwoord (waarvoor dank):
Onder ‘ Dim sPrinterNameAndPort’ definieert u meerdere printers naast de Zebra Designer. Wij beschikken over nog meer printers. Dien ik deze hier ook toe te voegen of bedoelde u dit ter illustratie?

U heeft eerder een goedwerkende macro voorgesteld waarin een vast ‘Ne’ nummer is verwerkt. Ik heb daarom moeite om de eerdere macro te kunnen combineren met de code voor het vinden van de string.

Bij voorbaat dank
 
Onder ‘ Dim sPrinterNameAndPort’ definieert u meerdere printers naast de Zebra Designer. Wij beschikken over nog meer printers. Dien ik deze hier ook toe te voegen of bedoelde u dit ter illustratie?
De andere printers zijn als voorbeeld

Ik heb daarom moeite om de eerdere macro te kunnen combineren met de code voor het vinden van de string.
Je zou de code in bericht#2
Code:
strPrinter = "ZDesigner ZD620-203dpi ZPL op Ne02:"
vervangen door
Code:
strPrinter = FindPrinterNameAndPort("ZDesigner ZD620-203dpi ZPL"

p.s. sla het bestand op, en probeer wat dingen, zo alleen leer je.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan