Condividi:        

Codice VBA per stampare UserForm attiva

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Codice VBA per stampare UserForm attiva

Postdi Carletto Ribolla » 19/01/25 17:13

Buona serata a tutti.
Come da titolo chiedo se è possibile -e se si, come- stampare in orizzontale una UserForm attivata a schermo intero (vedi immagine allegata) mediante un codice VBA da eseguire per mezzo del tasto indicato dalla freccia.

Grazie in anticipo per eventuali suggerimenti.


Immagine
Carletto Ribolla
Utente Junior
 
Post: 19
Iscritto il: 27/07/19 21:03

Sponsor
 

Re: Codice VBA per stampare UserForm attiva

Postdi Ricky0185 » 19/01/25 21:52

In attesa della soluzione di Anthony e per stampare una Userform1, nel suo codice inserisci
Codice: Seleziona tutto
Private Sub Command()
   Application.ScreenUpdating = False
   keybd_event VK_SNAPSHOT, 1, 0, 0
   'Workbooks.Add 1
   'ActiveSheet.Range("A1").Select
   'Application.Wait Now + TimeValue("00:00:01")
   'ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False
   With ActiveSheet
      .PageSetup.Orientation = xlLandscape
      .PageSetup.LeftHeader = "Userform1"
      .PrintOut
   End With
   ActiveWorkbook.Close False
   Unload Me
   Application.ScreenUpdating = True
End Sub

poi in un modulo standard inserisci
Codice: Seleziona tutto
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Public Const VK_SNAPSHOT = &H2C
Sub Stampa_Form()
UserForm1.PrintForm
End Sub

ed associa la Sub Stampa_Form al tasto prescelto.
Il tutto copiato/adattato da questo sito dove però inserisce un nuovo foglio sul quele riporta e stampa la Userform. Che raggiungeresti anche con un PrintScreen della Userform, incollandola su un foglio Excel e la stampi.
Funziona su XP e Office2003. Su win11 non l'ho provata poichè usai questo metodo parecchio tempo fa.
Ricky0185
Utente Senior
 
Post: 308
Iscritto il: 10/12/19 20:38

Re: Codice VBA per stampare UserForm attiva

Postdi Anthony47 » 19/01/25 22:02

In attesa della soluzione di Anthony...
Sono un apprendista, rispetto a Tom Urtis...

Ma se quella soluzione non funzionasse bene, allora io direi di provare associando al click di quel pulsante questo codice:
Codice: Seleziona tutto
Me.PrintForm

Vediamo cosa esce e poi ci ragioniamo su
Avatar utente
Anthony47
Moderatore
 
Post: 19519
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Codice VBA per stampare UserForm attiva

Postdi Carletto Ribolla » 20/01/25 10:25

Ad entrambi un sincero ringraziamento per i suggerimenti.
Ricky0185:
ho provato ma purtroppo non riesco ad adattarlo allo scopo (colpa mia intendiamoci: le mie conoscenze sono scarse al punto che non mi consentono ne di capire, ne come apportare aggiustamenti)

Anthony:
a dire il vero quel comando lo avevo provato. Risultato: stampa metà UserForm in quanto orientata in verticale. Occorrerebbe modificare anche l'orientamento ( ho già fatto tentativi col codice seguente ma... niente da fare!)

Codice: Seleziona tutto
Me.PrintForm
.Orientation = xlLandscape
Carletto Ribolla
Utente Junior
 
Post: 19
Iscritto il: 27/07/19 21:03

Re: Codice VBA per stampare UserForm attiva

Postdi Ricky0185 » 20/01/25 14:22

Stampando pdf da software così come da Windows to pdf viene utilizzata la stampante di default Qualunque sia la tua, prova a modificarne le Printing Preference nelle Proprietà, come l'orientamento ed il colore. Fai una stampa e vedi se funziona.
Metti questa macro in un modulo sttandard
Codice: Seleziona tutto
Sub Stampa_Form()
Dim RetStat
RetStat = Application.Dialogs(xlDialogPrinterSetup).Show
If RetStat Then
UserForm1.PrintForm
'With ActiveSheet
     ' .PageSetup.Orientation = xlLandscape
     ' .PageSetup.LeftHeader = "Userform1"
     '.PrintOut
  'End With
End If
End Sub

che ti permette di scegliere quale stampante utilizzare per stampare la UserForm, non importa che sia a schermo o no. Fatta la scelta modificane le impostazioni (colore ed orientamento) e dai l'OK.
Se funziona allora associa la macro al pulsante prescelto.
Se hai bisogno di sapere come inserire una macro o come associarla ad un pulsante....fai sapere
Ricky0185
Utente Senior
 
Post: 308
Iscritto il: 10/12/19 20:38

Re: Codice VBA per stampare UserForm attiva

Postdi Anthony47 » 20/01/25 16:11

Ricky ti ha suggerito di impostare manualmente, dal Pannello di Controllo, Stampanti e Scanner, la proprietà della stampante che usi per impostarne l’Orientamento Orizzontale. Credo che così funzionerà (fintanto che qualcun altro cambierà, anche da programma, questa impostazione).

Per farlo da programma bisognerebbe invece usare le API di windows, ma io sono un emerito ignorante e non ho trovato nulla che potessi copiare e suggerire.

Una possibile alternativa, se ti accontenti, potrebbe essere di rimpicciolire la userform prima di stamparla (per farla stare sul foglio stretto):
Codice: Seleziona tutto
Private Sub UserForm_Click()
    'scegli printer
    SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
    If SelPrint = False Then
        MsgBox "Stampa Cancellata"
        Exit Sub
    End If
Me.Zoom = 50
Application.Wait (Now + TimeValue("0:00:03"))
Me.PrintForm
Application.Wait (Now + TimeValue("0:00:03"))
Me.Zoom = 100
End Sub


La parte di scelta della stampante e’ opzionale; la puoi eliminare se non ti serve (fino a End If)
Le due Wait non so se sono necessarie, prova anche ad eliminarle, se la provi.
Avatar utente
Anthony47
Moderatore
 
Post: 19519
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Codice VBA per stampare UserForm attiva

Postdi Carletto Ribolla » 20/01/25 16:44

Grazie Ricky0185, grazie i Anthony47.

Ricky0185 ho provato ad inserire il codice:
1) mostra inizialmente la maschera con la stampante predefinita, e con la possibilità di accedere al tasto impostazioni.
2) da impostazioni vedo che l'orientamento è già orizzontale.
3) dunque do l'Ok alla stampa;... funziona!... ma il risultato è sempre lo stesso; ovvero, la stampa è ancora verticale.

Anthony47:
l'alternativa di adattare la UserForm in verticale funziona; una volta stampata riesco a leggere perfettamente tutto.
Il risultato è buono e si presenta più compatto. In orizzontale sarebbe stato peggio!

Vi ringrazio davvero di cuore per i suggerimenti mirati, ma di più per il tempo che mi avete riservato.
Carletto Ribolla
Utente Junior
 
Post: 19
Iscritto il: 27/07/19 21:03

Re: Codice VBA per stampare UserForm attiva

Postdi Carletto Ribolla » 20/01/25 17:09

Scusate se ritorno per sciogliere questo dubbio: tra i vari tentativi che avevo messo in atto, prima di rivolgermi a voi, c'è stato quello di attivare il registratore Macro e da tastiera catturare l'immagine -screenshot per intenderci- ma senza risultato.

Com'è possibile che la modalità registratore Macro, di fatto, non registri tutto?
Carletto Ribolla
Utente Junior
 
Post: 19
Iscritto il: 27/07/19 21:03

Re: Codice VBA per stampare UserForm attiva

Postdi Anthony47 » 20/01/25 21:41

Se ti lamenti del registratore di macro per Excel allora dovresti provare a registrare una macro su Word...
Comunque PrintScreen non e' una componente di Office, ma di windows; potresti provare con SendKeys, il cui funzionamento e' sempre rischioso (perche' in pratica invia comandi "alla cieca"), e rappresenta l'ultima spiaggia
Avatar utente
Anthony47
Moderatore
 
Post: 19519
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Codice VBA per stampare UserForm attiva":


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti

cron