aiuto codice vba



  • aiuto codice vba
    di ire data: 27/11/2014 09:59:45

    Ciao RAGAZZI!!
    è un mesetto che lavoro con vba e quindi, a volte, mi perdo ancora in cavolate...
    Perciò ho pensato di chiedere a voi un aiuto per i miei dubbi.
    Ora cercherò di spiegarmi il più possibile.
    ps: A chi vuole darmi gentilmente una mano, mando il file in privato...
    Mi servirebbe capire cosa fa il Target.intersect perchè facendo il debug quando ho il target.Row non coincide con la riga che sto prendendo in analisi. Il mio evento change si scatena nel momento in cui inserisco il numero della commessa nella colonna C e la condizione che fa partire le mie macro diverse è : controllo che la data contenente nella medesima riga nella colonna R sia passata o meno rispetto alla data odierna.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     Dim I As Integer
             Dim S As Date
             Dim T As Integer
                  
      If Target.Cells.Count = 1 And Target(1) <> "" And Not Intersect(Target, Range("C4:C200")) Is Nothing Then
            If IsDate(Range("R" & Target.Row)) Then
                I = ActiveCell.Row
                T = Cells(I, 42)
                S = DateAdd("d", T, Cells(Target.Row, 18))
                
                If S <= Date Then
                    Call InRITARDO(I, 0)
                    Else: Call InTEMPO(I, 0)
                End If
            End If
        End If
        If Target.Cells.Count = 1 And Target(1) <> "" And Not Intersect(Target, Range("W4:W200")) Is Nothing Then
            If IsDate(Range("AK" & Target.Row)) Then
                I = ActiveCell.Row
                T = Cells(I, 43)
                S = DateAdd("d", T, Cells(Target.Row, 38))
                
                If S <= Date Then
                   Call InRITARDO(I, 20)
                      Else: Call InTEMPO(I, 20)
                End If
            End If
        End If
    
    End Sub



  • di Lucas87 data: 27/11/2014 10:44:20

    Ciao
    1-Sei in un forum...non esiste il privato. Se il file contiene dati sensibili li puoi sostituire con valori falsi. Interessa capire la struttura e il tipo di dati usati. In alto a destra trovi il pulsante per allegare un file.
    2-Dalla guida di VBA:
    Intersect: Restituisce un oggetto Range che rappresenta l'intersezione rettangolare di due o più intervalli.
    In pratica, nel tuo caso, controlla che la cella modificata si trovi all'interno dell'intervallo specificato. Dato che il tuo scopo è avviare l'evento quando viene scritto qualcosa in colonna C, lo puoi sostituire con target.column=3, anche perchè, con il codice attuale, scrivendo in C201, la macro non entrerebbe in funzione.



  • di ire data: 27/11/2014 11:58:46

    grazie lucas87 per l'attenzione!
    Il file non so come caricarlo perchè zippandolo e cercando di snellirlo al massimo, il file è sempre maggiore del 1Mb! conoscete un altro modo per farvelo avere!? Ho letto che non si può mettere il link di un file condiviso sul web.. =(



  • di Lucas87 data: 27/11/2014 12:42:37

    Puoi riportare il link mettendo degli spazi del tipo
    h t t p:\



  • di ire (utente non iscritto) data: 27/11/2014 16:56:10

    eccomii!!! =) h t t p : / / www.filedropper.com/prova_2
    fammi sapere se per caso si riesce a capire qualcosa! =) grazie!



  • di Lucas87 data: 27/11/2014 16:59:45

    Non si capisce niente...
    Cosa dovrei fare?
    Quale è il problema?
    Cosa vuoi ottenere?



  • di ire (utente non iscritto) data: 28/11/2014 09:10:00

    Buon giorno.. =)
    Allora prima vorrei sapere cosa fa la prima riga del codice, ovvero quale è l'elemento scatenante.
    "If Target.Cells.Count = 1 And Target(1) <> "" And Not Intersect(Target, Range("C4:C200")) Is Nothing Then
    If IsDate(Range("R" & Target.Row))"
    della parte del codice sopra scritta mi servirebbe capire cosa fa quel target.
    Correggimi se sbaglio: io credo sia 'la cella nella colonna C non deve essere vuota e la data nella cella di colonna R deve essere una data."
    Il target.row però mi da il valore della riga PRECEDENTE e non quello della riga in analisi;io però ho bisogno della DATA sulla stessa riga! Non riesco a capire il perchè!

    Dopo aver controllato che questa data sia tale, la confronto con la data odierna. Questo è l'evento che fa agire le due macro! se la data è passata rispetto alla data odierna si compila dalla data collaudo fino ad arrivare alla consegna finale, al contrario si parte dalla data consegna fino ad arrivare al collaudo!
    Con ciò ho cercato di spiegarti in linea generale cosa fa il mio foglio...
    In più aggiungo che la chiave è il numero della commessa inserita nella colonna C.. Inserendo quella si compila tutta la riga corrispondente!

    Un' altra cosa: Dopo aver inserito la mia commessa, se clicco la spunta nella barra della formula va tutto bene, ma, nel caso in cui invece clicchi il tasto INVIO sulla tastiera, la mia macro non parte.!
    C'entra qualcosa il fatto che ci sia un CHANGE e non un SELECTION CHANGE?
    Se preferisci provo a caricarti il file completo du file dropper, così si capisce meglio!
    h t t p : / / w w w .filedropper.com/convocazionisett40_2
    GRAZIE DELL'ATTENZIONE!=)




  • di Lucas87 data: 28/11/2014 09:35:36

    Il codice si attiva quando viene modificata una cella. Target è il riferimento alla cella modificata. La riga che hai indicato controlla che:
    La cella modificata sia solo una, che non sia vuota e che appartenga all'intervallo C4:C200.
    IsDate...controlla che la cella contenga un valore che può essere interpretato come data.
    Target.Row è la riga su cui si trova la cella modificata
    È buona regola, per l'evento change, aggiungere a inizio e fine codice le istruzioni sotto, per evitare di finire in un loop infinito o di eseguire operazioni superflue.
     
    Application.EnableEvents = False
    ...
    ...codice...
    ...
    Application.EnableEvents = True