Stampa condizionale



  • Stampa condizionale
    di stecca67 (utente non iscritto) data: 15/04/2014 17:53:38

    Salve a tutti, sono nuovo del forum e di VBA, anche se da tanto uso excel.
    Vorrei riuscire a creare una macro inserendo qualche condizione, spero voi possiate aiutarmi.
    In un file Excel con due fogli di lavoro (Foglio1 e Foglio2) vorrei poter creare un pulsante e collegarci una macro (queste cose già le so) per stampare, oltre al contenuto del Foglio1, la prima pagina del contenuto del Foglio2 solo quando nel Foglio1 A1=1, la seconda pagina del Foglio2 solo quando nel Foglio1 B1=1 ed eventualmente le due pagine del Foglio2 quando in Foglio1 A1=1 e B1=1.
    Qualcuno mi aiuta? Grazie



  • di pero13 (utente non iscritto) data: 17/04/2014 15:56:15

    non sono un esperto....ma prova una cosa del genere
     
    Sub STAMPA()
    
    With Sheets("Foglio1")
    
    If [a1] = 1 Then
    Foglio2.PrintOut from:=1, to:=1
    End If
    
    If [b1] = 1 Then
    Foglio2.PrintOut from:=2, to:=2
    End If
    
    End With
    
    End Sub
    



  • di Lucas87 data: 17/04/2014 16:20:25

    Così?
    Viene avviata dal Foglio1
     
    If Range("a1") = 1 And Range("b1") = 1 Then
        Sheets(1).PrintOut
        Sheets(2).PrintOut
    ElseIf Range("a1") = 1 And Range("b1") <> 1 Then
        Sheets(1).PrintOut
        Sheets(2).PrintOut from:=1, to:=1
    ElseIf Range("a1") <> 1 And Range("b1") = 1 Then
        Sheets(1).PrintOut
        Sheets(2).PrintOut from:=2, to:=2
    End If



  • di stecca67 (utente non iscritto) data: 17/04/2014 17:33:31

    Le soluzioni mi sembra funzionino entrambe bene, ma quella pero13 non stampa il foglio1 che voglio venga stampato indipendentemente dal contenuto delle due celle. Ho risolto pedestramente come segue e mi pare funzioni.
    Noto una sostanziale differenza di metodo di scrittura tra voi due, seppur otteniate risultati identici. Se le condizioni che intendo inserire nella mia macro fossero più numerose (per intenderci se avessi anziché solo A1 e
    B1 anche c1, d1 ...z1 per stampare pagine corrispondenti nel foglio 2) quale risulterebbe secondo voi meno laborioso e pesante da inserire e da gestire?
    Vi ringrazio comunque fin da ora per le soluzioni che mi avete proposto a questo problema che mi sono posto per cercare di imparare un po' ad usare VBA.
     
    Sub STAMPA()
    With Sheets("Foglio1")
    Foglio1.PrintOut
    If [a1] = 1 Then
    Foglio2.PrintOut from:=1, to:=1
    End If
    If [b1] = 1 Then
    Foglio2.PrintOut from:=2, to:=2
    End If
    
    End With



  • di Zer0Kelvin data: 17/04/2014 23:48:39

    Ciao.
    Di solito l'istruzione if ... then ... elseif viene utilizzata quando ci sono delle condizioni che si escludono a vicenda; nel tuo caso, invece, penso sia più corretto utilizzare una serie di if ... then ... end if.
    Un consiglio: la notazione con parentesi quadre è "deprecata" e sarebbe da evitare.
     
    Sub STAMPA()
       With Foglio1
          .PrintOut
          If .Range("a1") = 1 Then
             Foglio2.PrintOut from:=1, to:=1
          End If
          If .Range("b1") = 1 Then
             Foglio2.PrintOut from:=2, to:=2
          End If
       End With
    End Sub
    



  • di stecca67 (utente non iscritto) data: 18/04/2014 09:23:55

    La soluzione di Zer0kelvin mi sembra sostanzialmente uguale a quella di pero13, ma cosa intendi che l'uso delle quadre è "deprecato"? che non è bello stilisticamente o che alla lunga potrebbe creare problemi all'esecuzione della macro.
    Onestamente se è solo un problema di "stile" credo di poterlo accettare. se dovessi scrivere una macro molto lunga con molti riferimenti farei prima a digitare la quadra che la tonda seguita da virgolette, o no?



  • di Zer0Kelvin data: 18/04/2014 10:03:03

    Ciao.
    Ti allego la definizione data da wiktionary:
    DEPRECATO - (informatica) in una specifica, definizione che in passato era documentata e considerata ufficiale, di cui attualmente si sconsiglia l'uso, perché sostituita e/o in attesa di essere dichiarata obsoleta, ma che è ancora supportata per garantire la retrocompatibilità.

    Nello specifico, Microsoft non garantisce la perfetta equivalenza fra la notazione con parentesi quadre e quella che utilizza l'oggetto Range e ne sconsiglia l'uso; in futuro tale notazione potrebbe non essere compatibile con le nuove versioni di Office.
    Riguardo al codice, non voleva essere una nuova soluzione, ho solamente "riscritto" il tuo codice con alcuni aggiustamenti di "stile".



  • di stecca67 (utente non iscritto) data: 18/04/2014 10:30:09

    Molto bene zer0kelvin, sei stato preciso proprio come piace a me.
    Ringrazio chi ha voluto darmi spiegazioni ed è intervenuto nella discussione. Posso ritenermi soddisfatto e dichiarare risolto il mio quesito.
    A presto.
    Stefano