Nota: Questa risposta è stata tradotta automaticamente. Di conseguenza, può contenere errori grammaticali o espressioni strane.
Ciao @Filiberto Battisti
Grazie per avermi contattato tramite il forum di domande e risposte di Microsoft.
In base alle informazioni descritte, ho capito che desideri sapere come stampare un’etichetta sulla stampante di etichette personale di ciascun utente in un’applicazione Microsoft Access.
In Microsoft Access, le etichette vengono normalmente create tramite un report di tipo etichetta. Per un’applicazione Access distribuibile (ad esempio un file ACCDE distribuito con Access Runtime), è possibile creare un report di etichette e utilizzare VBA per inviare la stampa alla stampante di etichette specifica dell’utente durante l’esecuzione. Un approccio consigliato è il seguente:
Passo 1: Creare il report delle etichette
Nel riquadro di spostamento, selezionare la tabella o la query contenente i dati delle etichette > .Andare alla scheda Crea > gruppo Report > Etichette > Seguire la procedura guidata: selezionare il produttore delle etichette e il numero di prodotto che corrisponde ai fogli o ai rotoli di etichette dell’utente > Aggiungere i campi al modello dell’etichetta e formattarli secondo necessità > Assegnare un nome al report (ad esempio “rptLabel”) e completare la procedura guidata.
Nelle Impostazioni pagina del report (in visualizzazione Struttura, prima della distribuzione), impostare opzioni generali come margini e formato carta in modo compatibile con le stampanti di etichette più comuni, ma senza vincolare il report a una stampante specifica; questa scelta va gestita a runtime per garantire flessibilità agli utenti.
Passo 2: Consentire all’utente di configurare la stampante di etichette
Poiché la stampante di etichette è “di proprietà dell’utente”, il nome della stampante varia da un computer all’altro. È quindi opportuno fornire un modulo di impostazioni nell’applicazione per consentirne la selezione:
Creare un modulo (ad esempio “frmSettings”) con una casella combinata (ad esempio “cboLabelPrinter”) > Popolare la casella combinata con l’elenco delle stampanti disponibili utilizzando VBA nell’evento Load del modulo:
Private Sub Form_Load()
Dim prt As Printer
Dim strPrinters As String
For Each prt In Application.Printers
strPrinters = strPrinters & prt.DeviceName & ";"
Next prt
Me.cboLabelPrinter.RowSource = strPrinters
Me.cboLabelPrinter.RowSourceType = "Value List"
' Load saved printer if exists (e.g., from a settings table)
Me.cboLabelPrinter = GetSavedPrinter() ' Custom function to retrieve from table/registry
End Sub
Aggiungere un pulsante Salva per memorizzare la selezione (ad esempio in una tabella locale come “tblSettings” con i campi “SettingName” e “SettingValue”):
Private Sub cmdSave_Click()
' Save to table (example using DAO)
CurrentDb.Execute "UPDATE tblSettings SET SettingValue = '" & Me.cboLabelPrinter & "' WHERE SettingName = 'LabelPrinter'"
MsgBox "Printer saved."
End Sub
In questo modo l’applicazione rimane distribuibile e configurabile dall’utente senza richiedere l’accesso alla modalità progettazione.
Passo 3: Stampare l’etichetta sulla stampante specifica tramite VBA
Utilizzare VBA per aprire il report in anteprima nascosta (modalità in cui la proprietà Printer è modificabile), impostare la stampante, avviare la stampa e chiudere il report senza salvare le modifiche.
Esempio di funzione di stampa (da richiamare tramite un pulsante o un evento, passando un filtro per l’etichetta o il record specifico):
Sub PrintLabel(strReportName As String, strWhere As String, strPrinterName As String)
On Error GoTo Error_Handler
Dim rpt As Report
' Open report hidden in preview to access Printer property
DoCmd.OpenReport strReportName, acViewPreview, , strWhere, acHidden
' Set report reference
Set rpt = Reports(strReportName)
' Set to the user-specified printer (from settings)
Set rpt.Printer = Application.Printers(strPrinterName)
' Optionally adjust other settings (e.g., orientation, copies)
rpt.Printer.Orientation = acPRORPortrait ' Or acPRORLandscape
rpt.Printer.Copies = 1
' Print the report
DoCmd.PrintOut acPrintAll
' Close without saving
DoCmd.Close acReport, strReportName, acSaveNo
Exit_Sub:
Set rpt = Nothing
Exit Sub
Error_Handler:
If Err.Number = 2501 Then Resume Exit_Sub ' Ignore if open canceled
MsgBox "Error " & Err.Number & ": " & Err.Description
Resume Exit_Sub
End Sub
È importante considerare che il layout del report può variare se il report è stato progettato per una stampante specifica. Cambiando stampante a runtime, potrebbero verificarsi differenze di impaginazione, che richiedono test o aggiustamenti aggiuntivi.
https://stackoverflow.com/questions/35631335/changing-printer-in-vba-for-access-also-change-page-layout
Nota: Microsoft fornisce queste informazioni per vostra comodità. Questi siti non sono controllati da Microsoft e Microsoft non può rilasciare alcuna dichiarazione in merito alla qualità, alla sicurezza o all'idoneità di software o informazioni ivi presenti. Assicuratevi di comprendere appieno i rischi prima di utilizzare i suggerimenti contenuti nel link sopra indicato.
Si prega di notare che la risorsa linkata in questa discussione è disponibile esclusivamente in inglese. Ci scusiamo sinceramente per qualsiasi inconveniente che questo possa causare a coloro che preferiscono o necessitano di contenuti in italiano. Purtroppo, una versione italiana di questo materiale non è attualmente fornita dalla fonte. Se avete bisogno di assistenza per comprendere il contenuto, vi consigliamo di utilizzare uno strumento o un servizio di traduzione affidabile.
Spero che queste informazioni siano utili.
Se la risposta è utile, clicca su ""Accetta risposta"" e vota favorevolmente la risposta positivamente. Se hai domande extra su questa risposta, clicca su ""Commento"".
Nota: Segui i passaggi in la nostra documentazione per abilitare le notifiche via e-mail se desideri ricevere la notifica correlata per questa discussione.