vba ver las impresoras y escoger una

24/08/2004 - 21:39 por et | Informe spam
Con application.dialogs(xldialogprinter) puedo ver el menú de impresoras y
seleccionar la que deseo, pero a alguién se le ocurre como hacerlo con una
macro.
Gracias
 

Leer las respuestas

#1 Héctor Miguel
25/08/2004 - 07:12 | Informe spam
hola, et !

Con application.dialogs(xldialogprinterSETUP) puedo ver ... impresoras y seleccionar la que deseo
... como hacerlo con una macro.



[hasta donde se...] las 'bases' serian las siguientes:
-> puedes obtener un listado de las impresoras instaladas [p.e.]
creando un objeto ("WScript.Network").EnumPrinterConnections
que te devuelve una matriz de dos dimensiones indicando 1° el puerto y 2° el nombre de cada impresora
-> con Application.ActivePrinter puedes 'tomar' [y 'dejar'] los datos de la impresora activa
si la vas a usar para 'cambiar' la impresora activa [por macros]... ->se requiere<-
1.- el nombre de la impresora
2.- una preposicion que indique...
3.- el puerto hacia el que se dirige la salida de la impresora
4.- dos puntos ->:<- para 'finalizar' la cadena
-> la preposicion [si en español... 'en' si en ingles... 'on' si en frances... 'sur' etc.]
=> NO te la proporciona <= el 'EnumPrinterConnections' [NI los dos puntos] :-((
tendrias que 'adivinarla' [asumiendo quizas una u otra] o... 'tomarla' de Application.ActivePrinter
[ademas] usar a la inversa las dimensiones de la matriz que devuelve 'EnumPrinterConnections'
=> 1° la segunda [nombre de la impresora] y 2° la primera [el puerto de conexion]
-> con respecto del puerto de conexion...
la matriz podria 'devolverte' [p.e.] un puerto USB001 [o alguna conexion de red]
y el Application.ActivePrinter 'mostraria' [p.e.] un puerto de conexion tipo 'Ne02:

te expongo en seguida un ejemplo [muy 'basico'] del uso del objeto 'WScript.Network'
presentando la informacion en un MsgBox [y asumiendo español para la preposicion -> en <-]
si quisieras que el usuario 'seleccione' de entre las opciones... podrias [p.e.]
cambiar el MsgBox por un InputBox ->manteniendo en alguna matriz 'global'<- las devoluciones del objeto]
[creo que sigue siendo mas 'sencillo' la presentacion del dialogo (xlDialogPrinterSetup)] :))

si cualquier duda... ¿comentas?
saludos,
hector.
en un modulo de codigo 'normal' ==Sub Informar_Impresoras()
Dim Txt As String, Sig As Integer
Txt = "Las impresoras disponibles son:"
With CreateObject("WScript.Network").EnumPrinterConnections
For Sig = 0 To .Count - 1 Step 2
Txt = Txt & vbCr & (Sig + 2) / 2 & ".- " & .Item(Sig + 1) & " en " & .Item(Sig)
Next
End With
Txt = Txt & vbCr & vbCr & "Impresora activa:" & vbCr & Application.ActivePrinter
MsgBox Txt, , "Lista de impresoras"
End Sub

Preguntas similares