gestione date



  • gestione date
    di Ruggero (utente non iscritto) data: 07/02/2015 11:03:07

    In un foglio "fatt_emes" voglio stampare soltanto righe definite da un range di due date chiamate "DA" e "A" confrontate con quelle presenti sulla colonna "B". Ho scritto da neofita questo codice ma mi da errore sulla riga che dovrebbe selezionare lòe righe da stampare, perché? grazie Ruggero
     
    Dim var1, var2, var3 As Date
    Dim primariga, ultimariga As Integer
    Dim sele As Range
    
    If OB1.Value = True Then
        
        UR = Worksheets("fatt_emes").Range("B1").End(xlDown).Row
        var1 = da.Value
        var2 = a.Value
            For t = 2 To UR
            var3 = Sheets("fatt_emes").Cells(t, 2)
            If var3 >= var1 Then
                primariga = t
                Exit For
            End If
            Next
            For t = 2 To UR
            var3 = Sheets("fatt_emes").Cells(t, 2)
            If var3 > var2 Then
                ultimariga = t - 1
                Exit For
            End If
            Next
        
        
            sele = Worksheets("fatt_emes").Range(Cells(primariga, 1), Cells(ultimariga, 6))
            sele.Select
        
        Sheets("fatt_emes").Select.PrintOut
        
    End If



  • di Vecchio Frac data: 07/02/2015 12:16:13

    Il metodo PrintOut invia alla stampante l'area di stampa corrente.
    Quindi devi prima impostare l'area di stampa al range che ti serve, e poi lanciare il comando.

    Nota che:
    - "sele" è un Range quindi lo devi assegnare con "set"
    - non serve preselezionarlo (niente "sele.Select")
     
    set sele = Worksheets("fatt_emes").Range(Cells(primariga, 1), Cells(ultimariga, 6))
    ActiveSheet.PageSetup.PrintArea = sele.address
    ActiveSheet.PrintOut preview:=True    'se togli preview:= o lo imposti a False, l'area verrà stampata direttamente invece che visualizzata in anteprima
    






  • di Vecchio Frac data: 07/02/2015 12:18:01

    p.s.
    "Dim var1, var2, var3 As Date
    Dim primariga, ultimariga As Integer"

    ---> attenzione che nel tuo codice *soltanto* var3 è dimensionata come Date, soltanto "ultimariga" è un Integer. Il resto è Variant. Questo perchè in VBA bisogna specificare e assegnare in modo esplicito per ogni variabile il proprio tipo.
    Quindi:
    Dim var1 as Date, var2 as Date, var3 As Date
    Dim primariga as Integer, ultimariga As Integer





  • di Ruggero (utente non iscritto) data: 07/02/2015 12:40:54

    Grazie a tutti per l'iteressamento.
    Però continuo ad avere lo stesso errore "errore di run time 1004 , errore definito dall'applicazione o dall'oggetto"
    sulla riga
    Set sele = Worksheets("fatt_emes").Range(Cells(primariga, 1), Cells(ultimariga, 6))
    son sicuro che è una banalità, ma non ne arrivo a capo



  • di Vecchio Frac data: 07/02/2015 13:39:13

    Accade quando non si qualificano sempre i range interessati, o lo fai per tutti o non lo fai per nessuno ^_^
    E a me sfugge sempre questo particolare, avrei potuto accorgermene, scusami.
    In pratica "sele" deve avere un riferimento al Worksheet specificato non solo nel Range ma anche nelle Cells.
    Al posto della riga con "set sele = " metti le tre righe che seguono.
     
    With Worksheets("fatt_emes")
        Set sele = .Range(.Cells(primariga, 1), .Cells(ultimariga, 6))
    End With
    






  • di Vecchio Frac data: 07/02/2015 13:40:56

    ... oppure visto che sei già nel foglio "fatt_emes", non serve proprio il riferimento.
    A te la scelta e lo studio delle due alternative :)
     
    set sele = Range(Cells(primariga, 1), Cells(ultimariga, 6)
    ActiveSheet.PageSetup.PrintArea = sele.address
    ActiveSheet.PrintOut preview:=True