Macro Imprimir

21/01/2006 - 22:26 por manu | Informe spam
Hola soy manu, solicito ayuda si fuera posible.
Utilizo varias macros para imprimir por diferentes bandejas de una
impresora que esta en Red. El problema está en que algunas veces uno u otro
ordenador desde donde se ejecuta la macro, no reconoce la impresora por
"Ne01", y al comprobar haciendo una macro mediante el asistente, un día sale
el código como"Ne01", pero otro "Ne02"ect, por lo que a veces la macro no
funciona.
Os envio la parte final de la macro para ayuda.
gracias.
'Impresion
Application.ActivePrinter = "\\Spa46433\Color Inforcom en Ne01:"
ActiveWindow.SelectedSheets.PrintOut Copies:=2, ActivePrinter:= _
"\\Spa46433\Color Inforcom en Ne01:", Collate:=True
'Restaura la impresora por defecto
Application.ActivePrinter = nombreimpre

Application.DisplayAlerts = False
ActiveWorkbook.Save
Sheets("DatosCliInfoComercial").Activate
 

Leer las respuestas

#1 KL
22/01/2006 - 00:06 | Informe spam
Hola Manu,

La siguiente funcion escrita por KeepItCool creo que hace lo que buscas. Tienes que copiar el codigo en un modulo estandar (p.ej.:
Modulo1) y ejecutar el procedimiento Test.

Saludos,
KL

'-inicio
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

Public Function PrinterFind(Optional Match As String) As String()
Dim n%, lRet&, sBuf$, sCon$, aPrn$()
Const lLen& = 1024, sKey$ = "devices"

'
'written by keepITcool

'requires xl2000 or newer.
'returns a zerobased array of complete localized printer strings
'results are filtered on Match string, if no result the ubound = -1
'

'Split ActivePrinter string to get localized word for "on"
aPrn = Split(Excel.ActivePrinter)
sCon = " " & aPrn(UBound(aPrn) - 1) & " "

'Read all installed printers (1k bytes s/b enough)
sBuf = Space(lLen)
lRet = GetProfileString(sKey, vbNullString, vbNullString, sBuf, lLen)
If lRet = 0 Then
Err.Raise vbObjectError + 513, , "Can't read Profile"
Exit Function
End If

'Split buffer string
aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
'Filter array on Match
If Match <> vbNullString Then aPrn = Filter(aPrn, Match, -1, 1)

For n = LBound(aPrn) To UBound(aPrn)
'Add 16bit portname for each Printer
sBuf = Space(lLen)
lRet = GetProfileString(sKey, aPrn(n), vbNullString, sBuf, lLen)
aPrn(n) = aPrn(n) & sCon & _
Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr(sBuf, ","))
Next
'Return the result
PrinterFind = aPrn

End Function

Sub Test()
Dim vaList, miImpresora As String
vaList = PrinterFind(Match:="Spa46433\Color Inforcom")
On Error Resume Next
MsgBox Application.Index(vaList, 1)
End Sub
'-Final

Preguntas similares