Stampare form



  • Stampare form
    di Rita (utente non iscritto) data: 26/10/2014 19:19:14

    Ciao a tutti volevo sapere se si può stampare una userform modificando il tipo di stampa se su foglio in verticale o in orizzontale. A me viene solo in orizzontale ed essendo la userform molto ampia non vi sta nel foglio. Qualche idea in merito



  • di Rita (utente non iscritto) data: 27/10/2014 18:48:48

    Nessuno ha un idea in merito,io avevo pensato anche una volta richiamata la userform a salvarla come un immagine ed incollarla sul foglio Excel per stamparla ma non ho idea come farlo



  • di lepat (utente non iscritto) data: 27/10/2014 19:02:33

    l'argomento è stato già affrontato con scarsi risultati, se fai una ricerca sul forum li puoi trovare



  • di Zer0Kelvin data: 27/10/2014 21:15:40

    Ciao.
    La prima voce che si incontra cercando su Google UserForm.PrintForm è questa:
    social.msdn.microsoft.com/Forums/en-US/def468a2-a317-496e-85a1-ab37bd449264/printing-vba-userform-as-landscape?forum=isvvba
    e la soluzione proposta corrisponde esattamente alla soluzione che avevo immaginato, cioè:
    - copiare la userform come immagine
    - incollare l'immagine su un foglio libero
    - impostare le proprietà di stampa per il foglio
    - effettuare la stampa del foglio
    Riporto il codice dell'esempio.
    Il codice esegue una copia della userform simulando la pressione dei tasti CONTROL-PRINTSCREEN, apre un nuovo workbook, incolla l'immagine, stampa e chiude il nuovo workbook.
    Da un veloce test sembra funzionare bene.
    PS: per funzionare su Office a 64 bit necessita di alcune modifiche...
     
    Option Explicit
    
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
        ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const VK_SNAPSHOT = 44
    Const VK_LMENU = 164
    Const KEYEVENTF_KEYUP = 2
    Const KEYEVENTF_EXTENDEDKEY = 1
    
    Private Sub CommandButton1_Click()
        DoEvents
        keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + _
            KEYEVENTF_KEYUP, 0
        keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + _
            KEYEVENTF_KEYUP, 0
        DoEvents
        Workbooks.Add
        Application.Wait Now + TimeValue("00:00:01")
        ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, _
            DisplayAsIcon:=False
        ActiveSheet.Range("A1").Select
        'added to force landscape
        ActiveSheet.PageSetup.Orientation = xlLandscape
       
      
    With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
    
        ActiveSheet.PageSetup.PrintArea = ""
       
        With ActiveSheet.PageSetup
            .LeftHeader = ""
            .CenterHeader = ""
            .RightHeader = ""
            .LeftFooter = ""
            .CenterFooter = ""
            .RightFooter = ""
            .LeftMargin = Application.InchesToPoints(0.75)
            .RightMargin = Application.InchesToPoints(0.75)
            .TopMargin = Application.InchesToPoints(1)
            .BottomMargin = Application.InchesToPoints(1)
            .HeaderMargin = Application.InchesToPoints(0.5)
            .FooterMargin = Application.InchesToPoints(0.5)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
            .PrintQuality = 300
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
            .Draft = False
            .PaperSize = xlPaperA4
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
        ActiveWorkbook.Close False
    End Sub 



  • di Zer0Kelvin data: 27/10/2014 21:18:01

    PS: sul mio PC la riga (1) dava errore, ho sostituito pastespecial con Paste e tutto funziona regolarmente
     
    '(1) questa istruzione dava errore:
     ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, _
            DisplayAsIcon:=False
    ---------------------------------------------------------
    'Sostituito con:
     ActiveSheet.Paste



  • di Rita (utente non iscritto) data: 28/10/2014 17:49:39

    Ciao devo dire che funziona magnificamente
    c'e' pero' un problema
    prima che inserissi l'opzione per poterla stampare richiamavo la userform dove all'interno c'e' una combobox e quando cliccavo nella combobox tramite l'istruzione posta qui sotto caricavo tutto quello che avevo nella colonna c del foglio clienti (solo le celle piene)
    ora quando ho inserito l'istruzione che mi hai postato nel momento in cui clicco sulla userform mi si apre un errore dove mi dice che la variabile conta2 non e' definita
    come posso ovviare

     
    Private Sub ComboBox1_Enter()
    conta2 = Application.WorksheetFunction.CountA(Foglio1.Range("C5:C65000")) + 3
    ComboBox1.RowSource = "CLIENTI!C5:C" & conta2 & " "
    End Sub



  • di anonimo (utente non iscritto) data: 28/10/2014 19:07:54

    Vedi se può andare..
    Saluti anonimo
     
    ' In dichiarazione Generali dell' userform inserisci
    Option Explicit
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Const VK_SNAPSHOT = 44
    Const VK_LMENU = 164
    Const KEYEVENTF_KEYUP = 2
    Const KEYEVENTF_EXTENDEDKEY = 1
    ' in un pulsante inserisci il codice sotto riportato
    Private Sub CommandButton2_Click()
     If MsgBox("Confermi la Stampa del Form?", Title:="Stampa Form.", Buttons:=vbInformation + vbYesNo) = vbYes Then
    Application.Wait (Now + TimeValue("00:00:02")) ' inserisce una pausa di 2 secondi, evitando di stampare il messaggio di scelta Si o No
    DoEvents
         
        Application.ScreenUpdating = False
         
        keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 10
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
        keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
         
        DoEvents
         
        Workbooks.Add
         
        Application.Wait Now + TimeValue("00:00:01")
        ActiveSheet.PasteSpecial Format:="Bitmap", Link:=False, _
        DisplayAsIcon:=False
        ActiveSheet.Range("A1").Select
        ActiveSheet.PageSetup.Orientation = xlLandscape
         
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
         
        ActiveSheet.PageSetup.PrintArea = ""
         
        With ActiveSheet.PageSetup
            .LeftHeader = ""
            .CenterHeader = ""
            .RightHeader = ""
            .LeftFooter = ""
            .CenterFooter = ""
            .RightFooter = ""
            .LeftMargin = Application.InchesToPoints(0.75)
            .RightMargin = Application.InchesToPoints(0.75)
            .TopMargin = Application.InchesToPoints(1)
            .BottomMargin = Application.InchesToPoints(1)
            .HeaderMargin = Application.InchesToPoints(0.5)
            .FooterMargin = Application.InchesToPoints(0.5)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
             .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
            .Draft = False
            .PaperSize = xlPaperA4
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = False
            .FitToPagesWide = 2 '' se  inserisci il numero 2 ti ingrandisce la stampa su due fogli
            .FitToPagesTall = 1
        End With
         
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
        ActiveWorkbook.Close False
         
        Application.ScreenUpdating = True
        End If
    End Sub



  • di Zer0Kelvin data: 28/10/2014 21:27:22

    Ciao.
    Non ho capito bene il senso dell'intervento di anonimo, comunque:
    ti dice che la variabile non è definita perchè la variabile non è definita.
    Vuol dire che la variabile conta2 non è stata dichiarata.
    Se hai l'orrenda abitudine di non dichiarare le variabili, elimina la riga
    Option Explicit
    all'inizio del codice, oppure inserisci le necessarie dichiarazioni di variabile nel tuo codice.



  • di Rita (utente non iscritto) data: 28/10/2014 23:50:34

    Ciao scusa la mia ignoranza mi spieghi il significato di dichiarare le variabili ossia partendo dal presupposto che funzioni tutto togliendo quello che hai detto che differenza c'è tra lasciarla e non lasciarla (parlo di option explicit)



  • di Zer0Kelvin data: 29/10/2014 07:06:24

    Option Explicit rende obbligatoria la dichiarazione di variabili in VBA; per una trattazione semplificata del significato di dichiarazione di variabile puoi leggere qui
    www.mrwebmaster.it/visual-basic/dati-tipi-dati-variabili-costanti_10061.html

    Per capire l'importanza della dichiarazione obbligatoria, prova ad inserire in un modulo standard il codice qui sotto e ad eseguirlo senza Option Explicit.
    Il codice non fa quello che ti aspetteresti, ed in un programma ampio può essere difficile capire dove stà l'errore.
    Ora aggiungi Option Explicit e riesegui la macro; l'errore viene segnalato immediatamente.
     
    Sub ErroreVariabile()
    Dim miavariabile As String
        mìavariabile = Range("A1").Address
        MsgBox miavariabile
    End Sub



  • di Rita (utente non iscritto) data: 29/10/2014 08:17:06

    Grazie ora mi e' chiaro
    in ogni caso mi hai risolto un problema non da poco
    thanks