Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: eenmalig selecteren van printers in een netwerk  (gelezen 12397 keer)

0 leden en 1 gast bekijken dit topic.

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #15 Gepost op: 24 april 2007, 22:22:50 »
Hoi Eric,

Als ik de code van Leo uitvoer ik heb deze printer niet in mijn netwerkje):
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        "RMT905 (ICT)", Collate:=True
krijg ik geen foutmelding, maar gaat ie het bestand gewoon afdrukken met de printer die bij mij dan als standaard ingesteld staat.  >:( Het lijkt alsof ie die lijn gewoon negeert als ie die tekst niet als printer herkent.

Ik heb ook het volgende eens geprobeerd.
Thuis heb ik volgende printers geinstalleerd: (resultaat via de door jouw aangereikte code)
hp deskjet 3600 series op Ne01:
CutePDF Writer op CPW2:
Adobe PDF op Ne03:


Ik heb mijn standaard printer ingesteld op de CutePDF printer via Bestand> Afdrukken, en de code veranderd naar
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        "hp deskjet 3600 series", Collate:=True
(afdrukken met de fysieke printer).
De afdruk kwam uit mijn printer gerold.

Ook andersom was er geen enkel probleem.
Via Bestand>Afdrukken de HP printer als standaard gezet, en de CutePDF printer in de code gebruikt .
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        "CutePDF Writer", Collate:=True






Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: eenmalig selecteren van printers in een netwerk
« Reactie #16 Gepost op: 24 april 2007, 23:38:41 »
OK, er komt iets meer licht ...
'k Heb nog wat zitten zoeken en proberen en kan nu zo nodig ook de printerpoort er bij zetten, zodat die codelijn wel "echt" werkt (en dus niet met de default gaat printen als er een fout in zit).

Spyder,
Citaat
Ook andersom was er geen enkel probleem.
Via Bestand>Afdrukken de HP printer als standaard gezet, en de CutePDF printer in de code gebruikt .
Wat bedoel je met "geen probleem"? Ging het naar PDF of drukte het "niet bedoeld" met de default printer?

goeie nacht,
Erikkkkkkkk

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #17 Gepost op: 24 april 2007, 23:51:07 »

Spyder,Wat bedoel je met "geen probleem"? Ging het naar PDF of drukte het "niet bedoeld" met de default printer?
De printer die geselecteerd stond in de code (Cute PDF) drukte de pagina af.

Het komt erop neer, dat als de printer die je in de code gebruikt effectief bestaat, deze ook voor de afdruk zorgt. In het andere geval, als er "onzin" staat zal hij gebruikmaken van de standaard printer.

goede nacht, en alvast bedankt voor de hulp. :)

spyder
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: eenmalig selecteren van printers in een netwerk
« Reactie #18 Gepost op: 25 april 2007, 09:30:56 »
OK,

Zo had ik het begrepen, maar het zou dom zijn om verder te bouwen wat niet 100% zeker is. Om af te drukken met die codelijn geen probleem, maar om de ActivePrinter daadwerkelijk te wijzigen is ook de poort nodig.

Application.ActivePrinter = "Printernaam op PoortNaam:"engelse versie: "op" wordt "on"
spaanse versie: "en"

Ik zit in de laatste fase om dit voor elkaar te krijgen. Als er iemand ondertussen nog commentaar heeft of iets nuttigs kan toevoegen: altijd welkom.

fijne dag verder,
Erik

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: eenmalig selecteren van printers in een netwerk
« Reactie #19 Gepost op: 25 april 2007, 13:08:39 »
Erik, het gaat in de vraag toch niet echt om het werkelijk 'omzetten' van de actieve printer? Volgens mij moet er alleen maar afgedrukt worden. En als dat lukt is de oplossing geslaagd volgens mij... ???

Wat natuurlijk niet wegneemt, dat ik reuze benieuwd ben met wat voor moois je nu weer komt aanzetten om óók de poort te kunnen opvragen. 8)

Tot 'oplossing' en groet, Leo
______________________________

Groet, Leo

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #20 Gepost op: 25 april 2007, 13:51:32 »
Hoi Leo,

Erik, het gaat in de vraag toch niet echt om het werkelijk 'omzetten' van de actieve printer?
Eigenllijk wel. :-[
Ik moet elke bon die gemaakt wordt , afdrukken op een op een printer, EN hij moet als PDF opgeslagen (en evntueel achteraf nog af tre drukken.

groetjes
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: eenmalig selecteren van printers in een netwerk
« Reactie #21 Gepost op: 25 april 2007, 14:56:47 »
OK, dit wordt weer een kanjer van een post. Wie geen bijlagen wil/kan/mag downloaden, heeft meteen alles bij de hand.

Speel eens effe met de bijlage.

BESCHRIJVING
USERFORM met
1 combobox
2 Labels (default_printer, pdf_printer)
4 CommandButtons (btn1, btn2, btn3, btn4)
(+ wat frames voor een mooiere indeling en "titels")

UserForm MODULE
Option Explicit

Private Declare Function lstrcpy Lib "kernel32.dll" _
    Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function lstrlen Lib "kernel32.dll" _
    Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Function EnumPrinters Lib "winspool.drv" _
    Alias "EnumPrintersA" (ByVal PrI_Flags As Long, ByVal name As String, ByVal Level As Long, _
    pPrinterEnum As Long, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Function GetProfileString& Lib "Kernel32" Alias "GetProfileStringA" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As String, _
    ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long)

Const PRINTER_ENUM_LOCAL = &H2

Private Type PrinterInfo
PrI_Flags As Long
PrI_Description As String
PrI_Name As String
PrI_Comment As String
End Type

Private Sub ComboBox1_Change()
update_btns
End Sub

Private Sub btn1_Click()
default_printer.Caption = ComboBox1
update_btns
End Sub

Private Sub btn2_Click()
pdf_printer.Caption = ComboBox1
update_btns
End Sub

Private Sub btn3_Click()
Unload Me
End Sub

Private Sub btn4_Click()
Range("default_printer") = default_printer
Range("pdf_printer") = pdf_printer
Unload Me
End Sub

Private Sub UserForm_Initialize()
default_printer = Range("default_printer")
pdf_printer = Range("pdf_printer")
ListPrinters
update_btns
End Sub

Private Sub update_btns()
Dim ok As Boolean
ok = ComboBox1 <> vbNullString
btn1.Enabled = ok And default_printer <> ComboBox1
btn2.Enabled = ok And pdf_printer <> ComboBox1
If Not ok Then Exit Sub
btn1.Caption = IIf(default_printer.Caption = vbNullString, "SET", "REPLACE")
btn2.Caption = IIf(pdf_printer.Caption = vbNullString, "SET", "REPLACE")
End Sub

Private Sub ListPrinters()
Dim longbuffer() As Long
Dim printinfo() As PrinterInfo
Dim numbytes As Long
Dim numneeded As Long
Dim numprinters As Long
Dim c As Integer, retval As Long
Dim PrinterList As String
Dim FullPrinterName As String

    numbytes = 3076
    ReDim longbuffer(0 To numbytes / 4) As Long
    retval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes, numneeded, numprinters)
   
    If retval = 0 Then
    numbytes = numneeded
    ReDim longbuffer(0 To numbytes / 4) As Long
    retval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes, numneeded, numprinters)
        If retval = 0 Then
        MsgBox "Could not successfully enumerate the printers."
        End
        End If
    End If

    If numprinters <> 0 Then ReDim printinfo(0 To numprinters - 1) As PrinterInfo

    For c = 0 To numprinters - 1
        With printinfo(c)
        .PrI_Name = Space(lstrlen(longbuffer(4 * c + 2)))
        retval = lstrcpy(.PrI_Name, longbuffer(4 * c + 2))
        End With
    Next c
   
    With Me.ComboBox1
    .Clear
        For c = 0 To numprinters - 1
        GetFullPrinterName printinfo(c).PrI_Name, FullPrinterName
        .AddItem FullPrinterName
        Next c
    End With
   
    '**** DELETE THIS TEST ****
    MsgBox "5 dummy printernames are added to test." & vbLf & "Delete that part of the code.", 64, "DUMMY PRINTERS"
    Dim i As Long
    For i = ComboBox1.ListCount To ComboBox1.ListCount + 4
    ComboBox1.AddItem "Printer" & i & " on LPT" & i
    Next i
    '**** END DELETE ****

End Sub

Private Sub GetFullPrinterName(PrinterName As String, FullPrinterName)

Dim buf As String
Dim retvalue As Long
Dim DriverName As String
Dim PortName As String
Dim strKeyWord As String
   
    buf = Space(1024)
    retvalue = GetProfileString("PrinterPorts", PrinterName, "", buf, Len(buf))

    GetDriverAndPort buf, DriverName, PortName
   
    If Len(DriverName) > 0 And Len(PortName) > 0 Then
    GetKeyWord Application.ActivePrinter, strKeyWord
    FullPrinterName = PrinterName & strKeyWord & PortName
    End If

End Sub

Private Sub GetDriverAndPort(ByVal buf As String, DriverName As String, PortName As String)
Dim i1 As Long
Dim i2 As Long

    'driver name starts string till ","
    i1 = InStr(buf, ",")
    If i1 > 0 Then
    DriverName = Left(buf, i1 - 1)
    i2 = InStr(i1 + 1, buf, ",")
        If i2 > 0 Then
        PortName = Mid(buf, i1 + 1, i2 - i1 - 1)
        End If
    End If

End Sub

Private Sub GetKeyWord(ActPrinter, KeyWord)
'needs input like "PrinterX on PTLx:"
'retrieving " on " from this string (Spanish = " en ", Dutch = " op ", ...)
Dim il As Long
Dim i1 As Long
Dim i2 As Long

'StrReverse not compatible with all versions: so using reverse loop
    For il = Len(ActPrinter) To 1 Step -1
        If Mid(ActPrinter, il, 1) = Space(1) Then
            If i2 = 0 Then
            i2 = il
            Else
            i1 = il
            Exit For
            End If
        End If
    Next il
'with spaces at start & end
If i1 * i2 Then KeyWord = Mid(ActPrinter, i1, i2 - i1 + 1)

End Sub

WERKBLAD met
2 benoemde cellen (default_printer, pdf_printer)
3 CommandButtons (CommandButton1, ...2, ...3)

WERKBLADMODULE
Option Explicit

Private Sub CommandButton1_Click()
SetPrinters_Form.Show
End Sub

Private Sub CommandButton2_Click()
'Application.ActivePrinter = Range("default_printer").Text
Me.PrintOut Copies:=1, ActivePrinter:=Range("default_printer").Text, Collate:=True
End Sub

Private Sub CommandButton3_Click()
'Application.ActivePrinter = Range("pdf_printer").Text
Me.PrintOut Copies:=1, ActivePrinter:=Range("pdf_printer").Text, Collate:=True
End Sub

Er staan wat testlijnen in de userformmodule, zodat iedereen die 'maar' 1 printer heeft, kan zien wat er gebeurt. Het lijkt me heel duidelijk welke lijnen dit zijn: zo kan je ze verwijderen.

Ik koos er voor om alle code onder te brengen binnen de userformmodule, zodat je bij 'verhuis' meteen alle bagage mee hebt.

veel zon gewenst :-)
Erik

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #22 Gepost op: 25 april 2007, 18:48:19 »
Hoi Eric,

Hier is maar 1 woord voor: Klasse!!  8)


Je gaat me even niet meer horen (behalve als er toch nog een probleem moest opduiken ;D). Ik ga "proberen" om bovenstaande in mijn toepassing in te voegen.

Alvast hartelijk bedankt. 8)

Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: eenmalig selecteren van printers in een netwerk
« Reactie #23 Gepost op: 25 april 2007, 22:35:02 »
Dankjewel voor het compliment :-)
Schrijf nu ook eens mijn naam met een "k" (doe ik ook sinds mijn +-9de)

Succes met de invoeging in je project!

(en je hebt nog steeds een PM van mij tegoed)

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: eenmalig selecteren van printers in een netwerk
« Reactie #24 Gepost op: 26 april 2007, 09:01:22 »
Erik, niet mijn Topic, toch ff reageren... ;) Het wachten op het eindresultaat was zéker de moeite waard!!!! Hoe speel je dit toch klaar? Tot het volgende 'moois'... ;D

Groet, Leo
______________________________

Groet, Leo

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #25 Gepost op: 09 mei 2007, 15:08:54 »
Hoi Erik,

Het werkt prima, maar er is een klein detail wat me raar voorkomt.
 :(

op 1 PC binnen het netwerk, krijg ik alleen de PDF printers te zien, en niet de fysieke printer.
Het rare is dat ie het wel naar de standaard fysieke printer stuurt en afdrukt.

spyder
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: eenmalig selecteren van printers in een netwerk
« Reactie #26 Gepost op: 09 mei 2007, 21:41:41 »
Dag, spyder,

Op het eerste zicht: als het op de andere machines wel werkt en niet op die ene, kan ik slechts in mijn haar krabben. Zelfde configuratie? Misschien eens inloggen onder een andere gebruikersnaam? Dit is maar een domme gooi, want ik zou niet weten wat, maar dit soort onzinnig lijkende antwoorden geven soms nieuwe ideeën... Al meermaals meegemaakt.

Ben benieuwd wat de oorzaak is. Misschien toch eens met functietoetsen F8 & F9 debuggen, maar het lijkt niet aan de code zelf te liggen.

beste groeten,
Erik

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #27 Gepost op: 09 mei 2007, 23:32:58 »
Hoi Erik,

Als ik de mogelijkheid heb ga ik me morgen eens aan die PC nestelen. ;)

groetjes
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.280
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: eenmalig selecteren van printers in een netwerk
« Reactie #28 Gepost op: 10 mei 2007, 08:20:12 »
Spyder, als je achter die bewuste PC zit en je geeft in (bijvoorbeeld) een office-programma een CTRL+p toetscombinatie, wordt die printer in dat venster dan WEL getoond? (gewoon ff als test, dan weet je of je verder in de code moet zoeken...)

Citaat
Het rare is dat ie het wel naar de standaard fysieke printer stuurt en afdrukt
Dat klopt volgens mij. Ik dacht dat we ergens in het begin van deze topic geconstateerd hadden dat welke 'onzin-output-port' je ook opgaf, de output altijd naar de standaard printer werd gestuurd... (dit is wel ff een opmerking 'uit de losse pols', dus niet gecheckt... ;))

Groet, Leo
______________________________

Groet, Leo

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: eenmalig selecteren van printers in een netwerk
« Reactie #29 Gepost op: 10 mei 2007, 11:17:17 »
Hoi Erik en Leo,

Ik heb zonet effe met de gauwte gekeken op de betreffende PC (ik vermoed dat er nog meerdere zijn binnen het netwer), en de printer noemt (via Bestand> Afdrukken)

\\srvdc13\P13WPL1
spyder
Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

 


www.combell.com