Avatar billede callevib Nybegynder
03. juni 2004 - 10:49 Der er 5 kommentarer og
1 løsning

Ny ActivPrinter

Hej derude.
Jeg har en opgave hvor jeg med VBA kode skal ændre navne på ActivePrinter. Standardprinteren er en S/H printer men dette regneark skal printes på farveprinteren når brugeren trykker på en knap. Der er tale om netværksprintere.
Det er normalt ikke et problem, men her kender jeg ikke navnet på den pågældende printer, fordi regnearket skal kunne bruges på forskellige lokationer. Jeg ved at den pågældende printer er en HPxxxx men ikke netværksadressen.
Det jeg håber er at der er en mulighed for at "hente"  det fulde navn på tilgængelige printere, og så teste på om det indeholder HPxxxx.
Men... måske sidder der en med en meget bedre løsning???
Med venlig hilsen
callevib
Avatar billede jkrons Professor
03. juni 2004 - 12:42 #1
Det må på en eller anden måde kræve nopget API programmering, som jeg ikke lige kan ryste ud af ærmet her og nu. Det er jo ikke Excel, der kender printerne men Windows, så koden må først hente listen i Windows, og dernæst analysere den for at finde de rigtige printere. Problemer opstår selvfølgelig i det tilfælde at flere printere alle indeholder HPxxxx.
Avatar billede jkrons Professor
03. juni 2004 - 12:59 #2
Men google kan ofte hjælpe:

Denne kode skal kopieres til et modul:

Private Declare Function GetProfileString Lib "kernel32" _
        Alias "GetProfileStringA" _
        (ByVal lpAppName As String, ByVal lpKeyName As String, _
        ByVal lpDefault As String, ByVal lpReturnedString As String, _
        ByVal nSize As Long) As Long




Function PrinterList()
  Dim lRet        As Long
  Dim sBuffer    As String
  Dim lSize      As Long
  Dim avTmp      As Variant
  Dim aPrn()      As String
  Dim n%, sPrn$, sConn$, sPort$

  'Get localized Connection string
  avTmp = Split(Excel.ActivePrinter)
  sConn = " " & avTmp(UBound(avTmp) - 1) & " "
  'Get Printers
  lSize = 1024
  sBuffer = Space(lSize)
  lRet = GetProfileString("devices", vbNullString, vbNullString, _
    sBuffer, lSize)
  sBuffer = Left(sBuffer, lRet)
  avTmp = Split(sBuffer, Chr(0))

  ReDim Preserve avTmp(UBound(avTmp) - 1)
  For n = 0 To UBound(avTmp)
    lSize = 128
    sBuffer = Space(lSize)
    lRet = GetProfileString("devices", avTmp(n), vbNullString, _
      sBuffer, lSize)
    sPort = Mid(sBuffer, InStr(sBuffer, ",") + 1, _
      lRet - InStr(sBuffer, ","))
    avTmp(n) = avTmp(n) & sConn & sPort
  Next
  PrinterList = avTmp
End Function

Koden er lavet af Jim Reck.

For at sætte den aktive printer til en printer fra listen, der indeholder bogstaverne HP i navnet, kan du bruge denne makro, som kalder Jim's kode:


Sub SetPrinter()

  For Each p In PrinterList
      If InStr(p, "HP") Then ActivePrinter = p
  Next p

End Sub

Er der flere printere, der indeholder bogstaverne HP, sættes den sidste fundne som den aktive printer.
Avatar billede callevib Nybegynder
03. juni 2004 - 13:30 #3
Hej jkrons
Det var helt perfekt og det fungere helt perfekt.
alle farveprintere er HP2500 og det finder den fint ud af
MVH
callevib
Avatar billede jkrons Professor
03. juni 2004 - 16:31 #4
Glæder mig at kunne hjælpe. Lukker du lige?
Avatar billede callevib Nybegynder
06. januar 2006 - 07:59 #5
Hejsa
Jeg har ikke rigtig styr på at lukke. Jeg har forsøgt at acceptere dit svar og håber at du nu får dine point. Eller vil jeg gerne høre hvordan jeg gør?
Jeg er supernovise her!
Avatar billede jkrons Professor
06. januar 2006 - 11:24 #6
Det er præcis korrekt. Du lukker ved aty aceeptere et svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel-kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester