Problemi dopo la stampa



  • Problemi dopo la stampa
    di nicole (utente non iscritto) data: 15/09/2014 12:33:31

    Ciao a tutti... Avrei un quesito da chiedervi ed è questo. Stampo in ordine alfabetico prendendo
    come riferimento la colonna S3 in poi. Le colonne che vengono stampate sono A, S, T, U, V, AB, AC.
    Tutte le altre colonne sono nascoste come si può notare nel codice sotto riportato.
    Il codice funziona quasi correttamente e cioè: dopo aver stampato non mi lascia sistemato il contenuto delle celle come era prima
    della stampa, ma me li mette in ordine Alfabetico.
    Esempio: se nella cella S3 ho "Call center" e nella colonna S4 ho "Ancora srl", il codice alla fine della stampa me li mette in S3 "Ancora Srl"
    e in S4 "Call center".
    Io vorrei che l'ordine alfabetico sia solo valido per la stampa, senza riportare modifiche sul foglio.
    Grazie anticipatamente a tutti.
    P.s. ho provato anche con Application.Undo, in modo da cancellare l'ultima operazione. Ma non va.

     
    ' Stampa in ordine alfabetico 
    If MsgBox("Confermi la Stampa in Ordine Alfabetico?", title:="Stampa", Buttons:=vbInformation + vbYesNo) = vbYes Then
    Dim K As Long
    Sheets("Dati").Select
    Cells(1, 19) = "Stampa in Ordine Alfabetico"  ' Scrive nella cella S1 un valore fisso
    
    K = Range("A" & Rows.Count).End(xlUp).Row
    
    Rows("3:" & K & "").Sort Key1:=Range("S3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal       'ordina le righe in base alla colonna S
    Columns("B:R").Hidden = True        'nasconde le colonne dalla B alla R
    Columns("W:AA").Hidden = True        'nasconde le colonne dalla W alla AA
    Columns("AD:AZ").Hidden = True        'nasconde le colonne dalla AD alla AZ
    
    ActiveSheet.PageSetup.PrintArea = "A1:AZ" & K & ""    
    
    Application.Dialogs(xlDialogPrint).Show     'mostra finestra di stampa
    
    Columns().Hidden = False    'mostra le colonne nascoste prima della stampa
    
    ActiveSheet.PageSetup.PrintArea = ""    'elimina l'area di stampa
    
    Range("S1").ClearContents ' Cancella il contenuto scritto in precedenza nella cella S1
    End If



  • di Lucas87 data: 15/09/2014 12:46:01

    Ciao
    Puoi creare una colonna nascosta che contenga una numerazione progressiva (che magari si compila quando scrivi una nuova riga). Alla fine del tuo codice puoi ordinare in base a quella colonna tornando quindi alla situazione di partenza



  • di nicole (utente non iscritto) data: 15/09/2014 12:54:23

    Ciao Lucas, gentilissimo.
    Il problema che non saprei come fare.
    Il codice non l'ho creato io ma trovato in rete ed adattato.
    Puoi aiutarmi?
    Grazie nicole



  • di nicole (utente non iscritto) data: 15/09/2014 12:58:19

    P.s. aggiungo che la colonna A partendo dalla A3 in poi, contengono solo dei numeri.



  • di Zer0Kelvin data: 15/09/2014 13:32:36

    Ciao.
    @Luca87:
    penso che la soluzione più semplice sia creare una copia temporanea dell'area interessata in un'altra posizione, effettuare ordinamento e stampa e poi ripristinare i valori originali dall'area temporanea.



  • di Zer0Kelvin data: 15/09/2014 13:38:07

    Così si risolverebbe con 2 sole istruzioni:
     
    Range(AreaOriginale).Copy Destination :=  Range(AreaTemporanea) ' salva l'elenco
    '
    ' esegue l'ordinamento e la stampa
    '
    Range(AreaTemporanea).Copy Destination :=  Range(AreaOriginale) ' ripristina l'elenco



  • di nicole (utente non iscritto) data: 15/09/2014 15:58:04

    Ciao Kelvin, ho provato il tuo codice solo che mi dice memoria insufficente. Sicuramente saranno i dati che son tanti.
    Ti riporto il codice di com lo impostato. Ho anche inserito il Clear per cancellare quanto primo copiato nel foglio d'appoggio.
    Grazie tante
     
    ' Stampa in ordine alfabetico 
    If MsgBox("Confermi la Stampa in Ordine Alfabetico?", title:="Stampa", Buttons:=vbInformation + vbYesNo) = vbYes Then
    Range("A3:AZ10000).Copy Destination :=  Sheets("FoglioAppoggioStampa").Range("A3:AZ10000") ' salva l'elenco
    Dim K As Long
    Sheets("Dati").Select
    Cells(1, 19) = "Stampa in Ordine Alfabetico"  ' Scrive nella cella S1 un valore fisso
    K = Range("A" & Rows.Count).End(xlUp).Row
    Rows("3:" & K & "").Sort Key1:=Range("S3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal       'ordina le righe in base alla colonna S
    Columns("B:R").Hidden = True        'nasconde le colonne dalla B alla R
    Columns("W:AA").Hidden = True        'nasconde le colonne dalla W alla AA
    Columns("AD:AZ").Hidden = True        'nasconde le colonne dalla AD alla AZ
    
    ActiveSheet.PageSetup.PrintArea = "A1:AZ" & K & ""    
    Application.Dialogs(xlDialogPrint).Show     'mostra finestra di stampa
    Columns().Hidden = False    'mostra le colonne nascoste prima della stampa
    ActiveSheet.PageSetup.PrintArea = ""    'elimina l'area di stampa
    
    Range("S1").ClearContents ' Cancella il contenuto scritto in precedenza nella cella S1
    
    sheets("FoflioAppoggioStampa").Range("A3:AZ10000").Copy Destination :=  sheets("Dati").Range("A3:AZ10000") ' ripristina l'elenco
    sheets("FoglioAppoggioStampa").select
    Range("A3:AZ10000").clear ' ho inserito questo codice per cancellare quanto prima copiato
    sheets("Dati").range("A1").select
    End If



  • di Zer0Kelvin data: 16/09/2014 12:59:35

    Ciao.
    Scommetto che da qualche parte hai infilato un
    On Error Resume Next
    perchè nel tuo codice ci sono alcuni errori di battitura e altro.
    Così a volo:
     
    -Qui mancano le virgolette
                             |        
    Range("A3:AZ10000).Copy Destination :=  Sheets("FoglioAppoggioStampa").Range("A3:AZ10000") ' salva l'elenco
    -qui il nome del foglio è errato
                            |
    Sheets("FoflioAppoggioStampa").Range("A3:AZ10000").Copy Destination:=Sheets("Dati").Range("A3:AZ10000")    ' ripristina l'elenco
    
    -Qui tenti di attivare una cella che non è nel foglio attivo
        Sheets("FoglioAppoggioStampa").Select
        Range("A3:AZ10000").Clear ' ho inserito questo codice per cancellare quanto prima copiato
        Sheets("Dati").Range("A1").Select
    



  • di nicole (utente non iscritto) data: 16/09/2014 17:12:44

    Ciao Kelvin. Ti riporto il codice con le modifiche. Sembra funzionare correttamente.
    Mi hai chiesto se ho inserito on errror resume next. Ti dico di No
    Perchè dovrei inserirla da qualche parte? A cosa serve?
    Ciao
     
    ' Stampa in ordine alfabetico
    If MsgBox("Confermi la Stampa in Ordine Alfabetico?", title:="Stampa", Buttons:=vbInformation + vbYesNo) = vbYes Then
    
    Range("A3:AZ10000").Copy Destination:=Sheets("FoglioAppoggioStampa").Range("A3:AZ10000")    ' salva l'elenco
    
    Dim K As Long
    Sheets("Dati").Select
    Cells(1, 19) = "Stampa in Ordine Alfabetico"  ' Scrive nella cella S1 un valore fisso
    K = Range("A" & Rows.Count).End(xlUp).Row
    
    ' Ordina partendo dalla riga 3 in base al valore trovato in S3.
    Rows("3:" & K & "").Sort Key1:=Range("S3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal       'ordina le righe in base alla colonna S
    
    Columns("B:R").Hidden = True        'nasconde le colonne dalla B alla R
    Columns("W:AA").Hidden = True        'nasconde le colonne dalla W alla AA
    Columns("AD:AZ").Hidden = True        'nasconde le colonne dalla AD alla AZ
    
    ActiveSheet.PageSetup.PrintArea = "A1:AZ" & K & "" ' Visualizza Area di stampa
    Application.Dialogs(xlDialogPrint).Show     'mostra finestra di stampa
    Columns().Hidden = False    'mostra le colonne nascoste prima della stampa
    ActiveSheet.PageSetup.PrintArea = ""    'elimina l'area di stampa
    
    Range("S1").ClearContents ' Cancella il contenuto scritto in precedenza nella cella S1
    Sheets("FoglioAppoggioStampa").Range("A3:AZ10000").Copy Destination:=Sheets("Dati").Range("A3:AZ10000")    ' ripristina l'elenco
    
    Sheets("FoglioAppoggioStampa").Select ' Seleziono il foglio
    Range("A3:AZ10000").Clear ' ho inserito questo codice per cancellare quanto prima copiato
    
    Sheets("Dati").Select ' ritorna sul foglio principale
    End If



  • di Zer0Kelvin data: 16/09/2014 20:39:11

    "On Error Resume Next" serve a far continuare l'esecuzione alla riga successiva anche se si verifica un errore.
    Ho pensato che ci fosse perchè il codice che hai postato avrebbe dovuto provocare degli errori che invece non hai citato.