Newsgroup: it.comp.appl.access
Titolo: Stampa su 2 stampanti diverse

Buonasera a tutti
A2003+Win xp
Vorrei Stampare uno stesso report in contemporaneo su 2 stampanti 
differenti.
Una � collegata su porta com e una � collegata sulla parallela.
Vorrei assegnare anche,tramite codice,la stampante al rispettivo report.
Ho trovato l'esempio di KARL DONAUBER(faq 5.1)
*********** INIZIO CODICE ************
'salva la stampante originale predefinita in una variabile
Dim strPrinterOld As String
strPrinterOld = Application.Printer.DeviceName
'cambia la stampante predefinita di Access
Application.Printer = Application.Printers("NomeDiAltraStampante")
'qui puoi fare delle splendide stampe
'alla fine resettare alla stampante predefinita originale
Application.Printer = Application.Printers(strPrinterOld)
'************ FINE CODICE *************
Da me modificato in
*********** INIZIO MIO CODICE ************
Public Function ScontrinoDpt281()
'esegue la stampa sulla stampante "Dpt281"
'la stampante Dpt281 stampa su LPT1
''salva la stampante originale predefinita in una variabile
    Dim strPrinterOld As String
    strPrinterOld = Application.Printer.DeviceName
Application.Printer = Application.Printers("dpt281")
DoCmd.OpenReport "ScontrinoDpt28X", acNormal
'esegue la stampa sulla stampante "Dpt282" su COM 1
Application.Printer = Application.Printers("dpt282")
            DoCmd.OpenReport "ScontrinoDpt28X", acNormal
'alla fine resettare alla stampante predefinita originale
    Application.Printer = Application.Printers(strPrinterOld)
End Function
************ FINE  MIO CODICE *************
Quando lo lancio ci mette circa 30 secondi per stampare il primo report e il 
secondo non lo stampa e mi da un errore "L'oggetto a cui si fa riferimento 
nell'espressione � stato chiuso o eliminato"
Dove sbaglio?
esistono altri metodi per assegnare tramite codice una stampante a un 
report?
Grazie
Maurizio 

 ha scritto nel messaggio 
news:4a512d02$0$1112$4faf...@reader4.news.tin.it...

Potresti fare cos�:
una delle due stampanti deve essere la predefinita;
stampa prima il report sulla stampante NON predefinita con il codice di Karl 
e poi stampi il report sulla stampante predefinita con il codice classico:
DoCmd.OpenReport "NomeReport", acNormal
A me funziona egregiamente.
Ciao, Carlo 

 Una � collegata su porta com e una � collegata sulla parallela.
Io faccio il giochetto cambiando la stampante predefinita in questo modo:
  DefaultPrinter = GetDefaultPrinter 'Leggo la stampante di default
  SetDefaultPrinter (TuaStampanteDifferenteDallaDEFAULT) 'Imposto la 
stampante che voglio
  DoCmd.OpenReport DocName, acViewNormal, , LinkCriteria 'Stampo
  SetDefaultPrinter (DefaultPrinter) 'Rimetto la stampante di default
  DoCmd.OpenReport DocName, acViewNormal, , LinkCriteria 'Ristampo con la 
DEFAULT
Crei un modulo ed inserisci questo:
Option Compare Database
Option Explicit
Declare Function GetProfileSection& Lib "kernel32" Alias 
"GetProfileSectionA" (ByVal lpAppName As String, _
  ByVal lpReturnedString As String, ByVal nSize As Long)
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)
Declare Function WriteProfileString& Lib "kernel32" Alias 
"WriteProfileStringA" (ByVal lpszSection As String, _
  ByVal lpszKeyName As String, ByVal lpszString As String)
Public DefaultPrinter As String
'Public Sub ResetDefaultPrinter()
  'reimposta a predefinita la stampante memorizzata nella var globale
'  SetDefaultPrinter (DefaultPrinter)
'End Sub
Public Function SostCar(s As String, C1 As String, c2 As String) As String
  'sostituisce un carattere con un altro in una stringa (solo prima 
occorrenza)
  Dim pos As Integer
  pos = InStr(1, s, C1)
  If pos > 0 Then Mid(s, pos) = c2
  SostCar = s
End Function
Public Sub SetDefaultPrinter(s As String)
On Error GoTo Esci
  'imposta la stampante passata come argomento a predefinita
  Dim x As Long
  If IsNull(s) Or s = "" Then Exit Sub
  x = WriteProfileString("windows", "device", vbNullString)
  DoEvents
  x = WriteProfileString("windows", "device", s)
  DoEvents
Esci:
End Sub
Public Function GetDefaultPrinter() As String
  'ritorna il nome della stampante predefinita
  Dim x As Integer
  Dim buffer As String
  buffer = Space$(255)
  x = GetProfileString("windows", "device", "?", buffer, 255)
  GetDefaultPrinter = Left$(buffer, x)
End Function
Ciao
Graziano