Newsgroup: it.comp.appl.access
Titolo: stampare etichetta con Dymo

Salve a tutti.
Ho necessità di inserire nella form "frmanagrafica" un pulsante che mi
stampi in automatico l'etichetta con la stampante Dymo LabelWriter400.
Ho creato un report con i dati che mi servono e sul campo IdAnagrafica
dell'origine dati del report nei criteri ho messo =forms!
[frmAnagrafica]![idanagrafica].
I dati del report sono giusti, ma ho problemi nella dimensione del
report e sul far memorizzare al report la stampante da utilizzare. Ho
trovato in questo NG un vecchio post di Jason con il seguente codice:
in un modulo ho messo:
Declare Function WriteProfileString& Lib "kernel32" Alias
"WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName
As
String, ByVal lpszString As String)
Public Sub SetDefaultPrinter(s As String)
'imposta la stampante passata come argomento a predefinita
On Error GoTo Esci
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
mentre su apertura report:
stamp = LeggiIni("PrnTermica", "Prn") & "," & LeggiIni("PrnTermica",
"Par1") & "," & LeggiIni("PrnTermica", "Par2")
SetDefaultPrinter (stamp)
Sleep 3000
'//Il risultato è stamp = "Prn=DYMO LabelWriter 400,winspool,Ne02"
Quando tento di aprire il report, mi apre il Vba e mi evidenzia
LeggiIni dicendomi
Errore di compilazione:
Sun o function non definita
Cosa manca?
N.B. sto utilizzando Access 2007 ma il file è in formato Access 2003.
Ciao.
Giuseppe.


la funzione LeggiIni
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access


Ciao Massimiliano, grazie per la risposta
In un post di Luca Dall'Olio, Lorenzo Coronati l'aveva postata.
L'ho copiata e messa in un modulo, ma ora mi dà lo stesso messaggio
evidenziandomi però
Sleep 3000
Cosa significa Sleep 3000?
Cos'altro devo modificare.
Ciao.
Giuseppe.

 wrote:
---cut---
Ciao Massimiliano, grazie per la risposta
In un post di Luca Dall'Olio, Lorenzo Coronati l'aveva postata.
L'ho copiata e messa in un modulo, ma ora mi dà lo stesso messaggio
evidenziandomi però
Sleep 3000
Cosa significa Sleep 3000?
Cos'altro devo modificare.
Più che modificare, aggiungere nelle dichiarazioni del modulo:
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds 
As Long)
-- 
Ciao
Geppo 

 ha scritto nel messaggionews:1e166b32-04ea-4612...@z19g2000yqe.googlegroups.com...

Ricapitolando ho messo su apertura del report:
Option Compare Database
Private Sub Report_Open(Cancel As Integer)
stamp = LeggiIni("PrnTermica", "Prn") & "," & LeggiIni("PrnTermica",
"Par1") & "," & LeggiIni("PrnTermica", "Par2")
SetDefaultPrinter (stamp)
Sleep 3000
'//Il risultato è stamp = "Prn=DYMO LabelWriter 400,winspool,Ne02"
End Sub
In un modulo:
Option Compare Database
Public Sub SetDefaultPrinter(s As String)
'imposta la stampante passata come argomento a predefinita
On Error GoTo Esci
Dim WshNetwork As Object
If IsNull(s) Or s = "" Then Exit Sub
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.SetDefaultPrinter (s)
Set WshNetwork = Nothing
DoEvents
Esci:
End Sub
In un secondo modulo:
Option Compare Database
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function GetPrivateProfileStringA Lib "kernel32" (ByVal
lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault
As String, ByVal lpReturnedString As String, ByVal nSize As Integer,
ByVal lpFileName As String) As Integer
Public Function LeggiIni(section As String, entry As String) As String
On Error GoTo annulla
    Dim manca As String
    Dim pathini As String
    Dim x As Integer
    Dim buffer As String
    buffer = Space$(255)
    manca = "?"
    pathini = left(CurrentDb.Name, Len(CurrentDb.Name) - 3) + "ini"
    x = GetPrivateProfileStringA(section, entry, manca, buffer, 255,
pathini)
    LeggiIni = left$(buffer, x)
    Exit Function
annulla:
MsgBox err.Description, vbCritical + vbOKOnly, "Errore"
End Function
Risultato: quando vado a stampare il report, mi dà la stampante
predefinita e anche se seleziono Dymo mi stampa l'etichetta
utilizzando 4 etichette (due righe sulla prima, due righe sulla
quarta, e la prima e la terza vuota).
Cosa c'è da cambiare? Ora messaggi di errore non ne ho; però appena
sistemata la stampante Dymo predefinita con le quattro righe stampate
su una sola etichetta, aggiungerò il pulsante sulla form anagrafica
per stampare direttamente l'etichetta dell'anagrafica attiva sulla
form.
Ciao.
Giuseppe.

 ha scritto nel messaggionews:1e166b32-04ea-4612...@z19g2000yqe.googlegroups.com...

Ricapitolo. Su apertura del report ho messo:
Option Compare Database
Private Sub Report_Open(Cancel As Integer)
stamp = LeggiIni("PrnTermica", "Prn") & "," & LeggiIni("PrnTermica",
"Par1") & "," & LeggiIni("PrnTermica", "Par2")
SetDefaultPrinter (stamp)
Sleep 3000
'//Il risultato è stamp = "Prn=DYMO LabelWriter 400,winspool,Ne02"
End Sub
In un primo modulo:
Option Compare Database
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function GetPrivateProfileStringA Lib "kernel32" (ByVal
lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault
As String, ByVal lpReturnedString As String, ByVal nSize As Integer,
ByVal lpFileName As String) As Integer
Public Function LeggiIni(section As String, entry As String) As String
On Error GoTo annulla
    Dim manca As String
    Dim pathini As String
    Dim x As Integer
    Dim buffer As String
    buffer = Space$(255)
    manca = "?"
    pathini = left(CurrentDb.Name, Len(CurrentDb.Name) - 3) + "ini"
    x = GetPrivateProfileStringA(section, entry, manca, buffer, 255,
pathini)
    LeggiIni = left$(buffer, x)
    Exit Function
annulla:
MsgBox err.Description, vbCritical + vbOKOnly, "Errore"
End Function
in un secondo modulo:
Option Compare Database
Public Sub SetDefaultPrinter(s As String)
'imposta la stampante passata come argomento a predefinita
On Error GoTo Esci
Dim WshNetwork As Object
If IsNull(s) Or s = "" Then Exit Sub
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.SetDefaultPrinter (s)
Set WshNetwork = Nothing
DoEvents
Esci:
End Sub
Dalla maschera anagrafica, tramite un pulsante apro il report ed ho
l'etichetta dell'anagrafica attiva sulla form.
Se vado in stampa mi dà sempre la stampante predefinita. Se scelgo
Dymo e poi nella sezione avanzate il tipo di etichetta che intendo
stampare e scrivendo da pagina 1 a pagina 1 la stampa è corretta.
Come faccio ad automatizzare tutte queste opzioni in modo che su click
del pulsante della maschera posso impostare la stampa diretta e non la
visualizzazione del report e la successiva stampa?
Grazie.
Giuseppe.



Messaggio sostituito con il post successivo.


Ricapitolo. Su apertura del report ho messo:
Option Compare Database
Private Sub Report_Open(Cancel As Integer)
stamp = LeggiIni("PrnTermica", "Prn") & "," & LeggiIni("PrnTermica",
"Par1") & "," & LeggiIni("PrnTermica", "Par2")
SetDefaultPrinter (stamp)
Sleep 3000
'//Il risultato è stamp = "Prn=DYMO LabelWriter 400,winspool,Ne02"
End Sub
In un primo modulo:
Option Compare Database
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function GetPrivateProfileStringA Lib "kernel32" (ByVal
lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault
As String, ByVal lpReturnedString As String, ByVal nSize As Integer,
ByVal lpFileName As String) As Integer
Public Function LeggiIni(section As String, entry As String) As String
On Error GoTo annulla
    Dim manca As String
    Dim pathini As String
    Dim x As Integer
    Dim buffer As String
    buffer = Space$(255)
    manca = "?"
    pathini = left(CurrentDb.Name, Len(CurrentDb.Name) - 3) + "ini"
    x = GetPrivateProfileStringA(section, entry, manca, buffer, 255,
pathini)
    LeggiIni = left$(buffer, x)
    Exit Function
annulla:
MsgBox err.Description, vbCritical + vbOKOnly, "Errore"
End Function
in un secondo modulo:
Option Compare Database
Public Sub SetDefaultPrinter(s As String)
'imposta la stampante passata come argomento a predefinita
On Error GoTo Esci
Dim WshNetwork As Object
If IsNull(s) Or s = "" Then Exit Sub
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.SetDefaultPrinter (s)
Set WshNetwork = Nothing
DoEvents
Esci:
End Sub
Dalla maschera anagrafica, tramite un pulsante apro il report ed ho
l'etichetta dell'anagrafica attiva sulla form.


 ha scritto nel messaggio
news:25fcdade-7f73-4c54...@z1g2000yqn.googlegroups.com...
----cut----
in un secondo modulo:
Option Compare Database
Public Sub SetDefaultPrinter(s As String)
'imposta la stampante passata come argomento a predefinita
On Error GoTo Esci
Dim WshNetwork As Object
If IsNull(s) Or s = "" Then Exit Sub
Set WshNetwork = CreateObject("WScript.Network")
reports!Nomereport.printer = WshNetwork.SetDefaultPrinter (s)
Set WshNetwork = Nothing
DoEvents
Esci:
End Sub
Dalla maschera anagrafica, tramite un pulsante apro il report ed ho
l'etichetta dell'anagrafica attiva sulla form.
Se vado in stampa mi dà sempre la stampante predefinita.
Se scelgo Dymo e poi nella sezione avanzate il tipo di etichetta che intendo
stampare e scrivendo da pagina 1 a pagina 1 la stampa è corretta.
Come faccio ad automatizzare tutte queste opzioni in modo che su click
del pulsante della maschera posso impostare la stampa diretta e non la
visualizzazione del report e la successiva stampa?
Comunque se hai una versione di access =>alla XP, prova a dare un occhiata 
nell'help
all'oggetto "Printer" e metodo "PrintOut", potrebbero fare al caso tuo.
-- 
Ciao
Geppo

 ha scritto nel messaggionews:25fcdade-7f73-4c54...@z1g2000yqn.googlegroups.com...

Grazie Geppo per la risposta.
Ho modificato il codice del secondo modulo in base al tuo
suggerrimento.
Il risultato è rimasto uguale.
Il file di access è versione Office 2003. La versione che utilizzo è
Office 2007.
Provo a dare un'occhiata nell'help, sperando che se qualche possessore
di stampanti Dymo utilizza o intende utilizzare la mia stessa idea,
partecipi a questa discussione.
Ciao Giuseppe.