View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
keepITcool keepITcool is offline
external usenet poster
 
Posts: 2,253
Default How do I determine the Acrobat Distiller codename?

Jeremy,

I posted the the more general PrinterList function a while back...

It works on Xl2k or newer (due to use of the split function.)
But it will work on international installs, where the ON string is
different.

The PrinterList Function will give you an array of all your printers.
in the correct Excel syntax.

Then (just for you :) I included the getDistiller
loop to make it simply

application.activeprinter=getdistiller


Suc6!

keepITcool

< email : keepitcool chello nl (with @ and .)
< homepage: http://members.chello.nl/keepitcool



Option Explicit

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 GetDistiller() as string
Dim pl, i%
pl = PrinterList
For i = LBound(pl) To UBound(pl)
If LCase(pl(i)) Like "*distiller*" Then
GetDistiller = pl(i)
Exit For
End If
Next
End Function


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))

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





"Jeremy Gollehon" wrote:

I'm trying to set the Acrobat Distiller as the default printer in
code. The problem I'm running into is that distiller has a different
codename on different computers.

Eg.- On my computer it's Application.ActivePrinter = "Acrobat
Distiller on Ne01"
On another system, its Application.ActivePrinter = "Acrobat
Distiller on Ne02"

Is there a way to establish a variable like DistillerName =
%Distiller% ????

Then I could run the code:
Application.ActivePrinter = DistillerName

Application.ActivePrinter = "Acrobat Distiller" does not work.

It would also be great if anyone knew how to get the code name of the
current active printer so I could put it back when I'm done.

Thanks!
-Jeremy