Cambiar impresora predeterminada

Primeramente me gustaría darte las gracias por ayudarme.
Estoy realizando una aplicación en Access2000 con VB y me gustaría saber como se puede hacer para cambiar la impresora predeterminada sin ir a configuración...
Quiero hacer esto porque cuando le da a un botón me imprime una serie de informes, pero me los saca por la impresora predeterminada y hay en algún caso que por ahí no los queremos imprimir, por lo que me gustaría hacer que cuando le da al botón me elija la impresora predeterminada y luego me mande todos los informes a imprimir.

3 respuestas

Respuesta
1
Inserta esta función a ver si te funciona correctamente:
'*******************
Public Sub Printing(printer As String)
Try
streamToPrint = New StreamReader(filePath)
Try
printFont = New Font("Arial", 10)
Dim pd As New PrintDocument()
AddHandler pd.PrintPage, AddressOf pd_PrintPage
' Specify the printer to use.
pd.PrinterSettings.PrinterName = printer
If pd.PrinterSettings.IsValid then
pd.Print()
Else
MessageBox.Show("Printer is invalid.")
End If
Finally
streamToPrint.Close()
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
'*******************
También puedes insertar un listado de impresoras para seleccionar en la que quieres imprimir:
Dim x As Printer
For Each x In Printers
List1.AddItem x.DeviceName
If x.DeviceName = "Nombre Impresora a Utilizar" Then
Set Printer = x
End If
Next x
Si no te funcionan las soluciones anteriores escríbeme y buscamos otra forma.
Dim x As Printer
For Each x In Printers
If x.DeviceName = "nombre" Then
Set Printer = x
End If
Next x
Pongo esto y me sigue imprimiendo en la predeterminada y no en l que le he puesto donde nombre, y si me entra en el if porque le he puesto un msgbox y me hace bien la comparación. Esta solución si me funciona porque el me selecciona de un desplegable la impresora y yo hago esto para mandar a imprimir ahí.
¿Sabes por qué puede ser que no funcione?
Muchísimas gracias.
La verdad es que no tengo ni idea. Si ves que esta solución no es muy adecuada para tu caso, o que a la larga t produce errores, podemos utilizar un Cuadro de Diálogo para seleccionar la impresora, tal y como aparece en el Word (x ej.). Para esto utilizamos los CommonDialogs, que son bastante útiles pal tema.
Si quieres más información, no dudes en escribir.
Respuesta
1
Si utilizas esto:
Docmd. Runcommand accmdprint
Te sale el cuadro de impresión pero creo que esto no es lo que quieres tu. ¿Tu deseas que cuando vayas a imprimir algo según el botón que le des te imprima por una impresora o por otra no?.
MIRA EN ESTA WEB CREO QUE HAY UN EJEMPLO:http://www.clikear.com/webs/accessbhuo/id.asp?topico=19
No puedo abrir esa página.
Si eso es lo que quiero, cuando le doy al botón me imprime un montón de informes y lo que quiero es que nada más darle al botón me saqué el cuadro y elija una impresora, una vez elegida esta me mande todos los informes por esa impresora.
Muchísimas gracias
Es cierto perdona el link no funciona. Bueno te envío un poco de código a ver si te funciona.
'*********************************************************
' wshSetDefaultPrinter
'
' Con esta sencilla rutina, cambiamos la impresora
' predeterminada del sistema.
'
' Argumentos
' prn: Requerido. El nombre de la nueva impresora
' predeterminada. Si este nombre no coincide con
' ninguna impresora instalada en el sistema se
' producirá un error.
'
' Para obtener los nombres de las impresoras instaladas
' y si se está trabajando con una versión de Access
' inferior a la XP, podéis utilizar el código que se
' muestra en wshPrinters
'
Sub wshSetDefaultPrinter(prn As String)
Dim wshNetwork As Object 'New wshNetwork
Set wshNetwork = CreateObject("WScript.Network")
wshNetwork.SetDefaultPrinter prn
Set wshNetwork = Nothing
End Sub
'*********************************************************
' wshPrinters
'
' Esta función devuelve una colección con los nombres de
' las impresoras instaladas en el sistema
'
' Se puede poner en un módulo estadar para que pueda ser
' llamada desde cualquier punto de la aplicación y
' enumerar sus elementos como si de cualquier colección
' se tratase. Por ejemplo, este procedimiento escribirá
' en la ventana inmediato los nombres de todas las
' impresoras instaladas
'
Sub EnumPrinters()
Dim prn As Variant
For Each prn In wshPrinters
Debug.Print prn
Next
End Sub
'
' Coloca esta función en un módulo estandar
'
Public Function wshPrinters() As Collection
Dim wshNetwork As Object 'New wshNetwork
Dim col As New Collection
Dim i As Integer
Set wshNetwork = CreateObject("WScript.Network")
With wshNetwork.EnumPrinterConnections
For i = 0 To .Count - 1
If i Mod 2 <> 0 Then
col.Add .Item(i)
End If
Next
End With
Set wshPrinters = col
Set col = Nothing
Set wshNetwork = Nothing
End Function
'*********************************************************ESTE CÓDIGO LO PUEDES ENCONTRAR EN http://www.mvp-access.com/juanmafan/wsh/wshprinters.htm.
Respuesta
1
Lo que quieres hacer es un poco complicado en Access y requiere mucha programación de VB. Primero es bueno ver si te sirve predeterminar la impresora para los reportes que se desean enviar siempre a una impresora en particular. Esto se hace en el modo de diseño del reporte, en configuración de página y se selecciona la impresora deseada. Nota: si después cambian la impresora por otro nombre u otra diferente, el reporte no se podrá imprimir a menos que se vuelva a configurar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas