Avatar billede Newbee1 Novice
23. september 2011 - 08:37 Der er 4 kommentarer og
1 løsning

Makro styre netwærks printer

Hej

Jeg har et regneark, der udskrives på et netværk, af forskellige bruger.

Jeg har lavet en makro, der udskriver regneark på en printe,r der ikke er default printer.

Problemmet er, printer navn/kode, ændres efter hvilken computer og bruger der er logget, på  eks hp 2100 on neo00 eller neo04.


Og derved virker makro kun for en bruger.

Er der en måde jeg kan komme uden om dette, evt. få makro til at ændre default printer, og efter print sætte, den tilbage igen ?


MVH

Tony
Avatar billede Tryphon Nybegynder
26. september 2011 - 08:45 #1
Jeg har haft samme problem og fandt
' http://msdn.microsoft.com/en-us/library/aa394600(VS.85).aspx
hos Microsoft og har rettet koden lidt til for at få fat på den irriterende kode, der står efter printernavnet på de enkelte maskiner. Du skal hente f.eks. 'neo00' fra registreringsdatabasen.

Du skal nok rette lidt til. Jeg har skrevet et par kommentarer, hvor jeg mener, du skal rette. Jeg håber, jeg har fået det hele med.

Klip nedenstående kode ud og set det i et separat modul
Kald koden med en variabel: printernavn = GetPrinter
Så vil du have hele det korrekte printernavn i variablen printernavn, og kan printe til den printer.


Option Explicit

Public Enum Hive
  HKEY_CLASSES_ROOT
  HKEY_CURRENT_USER
  HKEY_LOCAL_MACHINE
  HKEY_USERS
  HKEY_CURRENT_CONFIG
End Enum

Function GetPrinter() As String
Dim ActPrt As String
Dim pos As Integer
Dim registryKey As String
Dim keyName As String

  ActPrt = Application.ActivePrinter
  registryKey = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
' *** Ændr IP en del af IP adressen, hvor der står "10.217" nedenfor
  pos = InStr(InStr(1, ActPrt, "10.217"), ActPrt, " ") - 1
' *** KeyName = den printer, du vil printe på.
  keyName = Left(ActPrt, pos) & " - Tilbud"
 
  ' get string value from registry
GetPrinter = keyName & " på " & Mid(GetStringValFromRegistry(HKEY_CURRENT_USER, registryKey, keyName), 10, 4) & ":"

End Function

Function GetHive(hivetype As Hive) As Variant
' return enumerated value depending on the hive chosen
Select Case hivetype
    Case 0
      GetHive = &H80000000  ' HKEY_CLASSES_ROOT
  Case 1
      GetHive = &H80000001  ' HKEY_CURRENT_USER
  Case 2
      GetHive = &H80000002  ' HKEY_LOCAL_MACHINE
  Case 3
      GetHive = &H80000003  ' HKEY_USERS
  Case 4
      GetHive = &H80000005  ' HKEY_CURRENT_CONFIG
End Select

End Function

Function GetStringValFromRegistry(hivetype As Hive, registryKey As String, _
    keyValue As String) As String

Dim objReg As Object
Dim strKeyPath As String
Dim ValueName As String
Dim strValue As String

  Set objReg = GetStdRegProv

  strKeyPath = registryKey
  ValueName = keyValue

  ' put key value into strValue variable
  objReg.GetStringValue GetHive(hivetype), strKeyPath, ValueName, strValue
  GetStringValFromRegistry = strValue

End Function

Function GetStdRegProv() As ObjectDim strComputer As String

  strComputer = "."

  Set GetStdRegProv = GetObject("winmgmts:" _
                              & "{impersonationLevel=impersonate}!\\" _
                              & strComputer & "\root\default:StdRegProv")
End Function
Avatar billede Newbee1 Novice
27. september 2011 - 06:08 #2
Hej Tryphon


Tak for dit svar.

Hvis jeg har forstået det rigtigt:


Jeg skal kun bruge 5 cifre af ip adressen ?

Indsætter printer navn på keyname = printer navn.


Hvad med der hvor du har skrevet "tilbud"


MVH

Tony
Avatar billede Tryphon Nybegynder
27. september 2011 - 09:04 #3
Du kan bruge 5 cifre eller en længere del af IP adressen, efter, hvad der passer bedst i din situation. Det er bare søgekriteriet til at finde nøglen i registreringsdatabasen. Elles prøv dig frem. Find evt. nøglen direkte i registreringsdatabasen - så ved du, hvad du skal lede efter.

" - Tilbud" skal du se helt bort fra. Jeg bruger koden i vores tilbudssystem og tilbudsprinteren hedder det samme som standardprinten (samme printer), men printkøen for at få det på tilbudspapier er IP adresse efterfulgt af " - Tilbud". Så " - Tilbud" er bare en del af printernavnet. Beklager forvirringen :-)

Keyname = printernavn.

Det er længe siden, jeg har rodet med koden, men så vidt jeg kan se, er der ikke andet, der skal ændres. Der er en lille risiko for, at du også skal ændre i GetPrinter lige nedenunder KeyName. Det afhænger helt af din systemopsætning.

GetPrinter i mit tilfælde returnerer "10.217.xxx.xx på NE04". Mid klipper NE04 ud af registreringsdatabasen.

GetPrinter = keyName & " på " & Mid(GetStringValFromRegistry(HKEY_CURRENT_USER, registryKey, keyName), 10, 4) & ":"
Avatar billede Newbee1 Novice
30. september 2011 - 08:12 #4
Hej Tryphon


Tak for hjælpen



Kan jeg give dig points ?


MVH

Tony
Avatar billede Tryphon Nybegynder
30. september 2011 - 08:48 #5
Ja, værsgo. Det glæder mig, at jeg kunne hjælpe.
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

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