For count = 0 To Application.CurrentProject.AllReports.count - 1
DoCmd.OpenReport
ReportName:=Application.CurrentProject.AllReports(count).Name,
view:=acViewDesign, windowmode:=acHidden
Reports(count).UseDefaultPrinter = False
Reports(count).Printer.DeviceName = Me.cmbStampanteSpecifica
DoCmd.Close objecttype:=acReport,
objectname:=Application.CurrentProject.AllReports(count).Name,
Save:=acSaveYes
Next count
Mi restituisce errore IMPOSSIBILE ASSEGNARE PROPRIETA' DI SOLA LETTURA sulla
riga che tenta di modificare il DeviceName
Ma aprendo il report in acViewDesign non dovrebbe essere possibile la
modifica?
Ciao e grazie
RobertoA
Io uso questo in un modulo con ACCESS 2000:
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
La proprietᅵ DeviceName ᅵ di sola lettura. Devi cambiare il Printer.
Se il nome dello stampante ᅵ la colonna associata della combo:
Reports(strNomeReport).Printer = _
Application.Printers(Me!cmbStampanteSpecifica)
Dove strNomeReport ᅵ una variabile con il nome del Report, perchᅵ
il tuo metodo con un Count a due insiemi diversi ᅵ strano e pericoloso.
--
HTH
Karl
*********
Access FAQ: www.donkarl.com/it
Forse mi sono spiegato male
Non desidero modificare la stampante predefinita di sistema
Desidero cambiare le impostazioni di tutti i report che attualmente sono su
'stampante predefinita' e metterci 'stampante specifica' ed indicargli la
stampante richiesta
Ciao e grazie
RobertoA
Ti ringrazio per la risposta
Ho provato e mi restituisce l'errore
CHIAMATA DI ROUTINE O ARGOMENTI NON VALIDI
e' l'istruzione Application.Printers(Me!cmbStampanteSpecifica) a generare
l'errore, da notare che Me!cmbStampanteSpecifica mi restituisce
correttamente la stampante impostata e disponibile tra quelle visibili su
Stampanti e Fax
Ho provato anche a definire una variabile di tipo Printer e poi assegnarci
il valore letto da Application.Printers(Me!cmbStampanteSpecifica)
Stesso errore
Ciao
RobertoA
Secondo me MEGLIO LASCIARE STAMPANTE PREDEFINITA.
In funzione del report che devi stampare IMPOSTI LA STAMPANTE PREDEFINITA
UGUALE ALLA STAMPANTE SPECIFICA poi la riporti normale
Ciao
Graziano
Ti ringrazio
Ma in questo caso devo realizzarre la funzione richiesta
Ciao
RobertoA
Prova con una variabile stringa:
Dim strPrinter As String
strPrinter = Me!cmbStampanteSpecifica
Reports(strNomeReport).Printer = Application.Printers(strPrinter)
Ora va
Grazie mille
RobertoA
Si, passano le istruzioni, ma non ottengono l'effetto voluto
Se apro un qualsiasi report in modalita' struttura, vedo sempre il pallino
su 'Stampante Predefinita'
Il codice che uso e' questo
------------------------------------------------------------------------
stampante = Me!cmbStampanteSpecifica
For count = 0 To Application.CurrentProject.AllReports.count - 1
DoCmd.OpenReport
ReportName:=Application.CurrentProject.AllReports(count).Name,
view:=acViewDesign, windowmode:=acHidden
Reports(Application.CurrentProject.AllReports(count).Name).UseDefaultPrinter
= False
Reports(Application.CurrentProject.AllReports(count).Name).Printer
= Application.Printers(stampante)
DoCmd.Close objecttype:=acReport,
objectname:=Application.CurrentProject.AllReports(count).Name,
Save:=acSaveYes
Next count
------------------------------------------------------------------------
La DoCmd.Close dovrebbe salvare il report con le impostazioni modificate
Ma in duve l'e' che sbaglio?
RobertoA
Il nome "Count" per una variabile e abbastanza pericoloso.
Come dovresti vedere nel proprio codice � una parola chiave.
� meglio usare prefissi che mostrano il tipo delle variabili.
Inoltre dovrebbe aiutare un commando aggiuntivo per salvare
le impostazioni. Prova cos�:
Dim objAcc As AccessObject
Dim strReport As String, strStampante As String
strStampante = Me!cmbStampanteSpecifica
For Each objAcc In Application.CurrentProject.AllReports
strReport = objAcc.Name
DoCmd.OpenReport strReport, acViewDesign, acHidden
Reports(strReport).UseDefaultPrinter = False
Reports(strReport).Printer = Application.Printers(strStampante)
RunCommand acCmdSave
DoCmd.Close acReport, strReport, acSaveYes
Next objAcc
--
cu
Eh si, cosi va proprio bene
A parte il fatto che su un mde, ovviamente non va
Ma come fare per consentire all'utente finale di modificarele stampe senza
dargli i sorgenti?
Con Crystal Report era una pacchia, sto seriamente pensando di adottarlo
anche per Access
Ciao e grazie mille
Roberto
Puoi p.e. offrire le stampanti in una casella combinata
(vedi anche l'apposito codice in www.donkarl.com/it?FAQ5.1)
e/o salvare le stampanti in una tabella.
Poi usa questi valori per cambiare il Printer a runtime senza
salvarlo nel report. Ci sono tanti esempi e varianti nella FAQ 5.1
e nei NG come cambiare o l'Application.Printer o la stampante
del singolo report temporaneamente.
--
HTH
Grazie mille per la tua disponibilita' a condividere un'esperienza davvero
invidiabile
Ciao
RobertoA