Evento change esterno



  • Evento change esterno
    di Skario (utente non iscritto) data: 22/04/2010

    Ciao a tutti sono skario,
    aiuto!ho un problema che non riesco a risolvere:
    con l'evento change al variare di un dato in una cella svolgo alcune operazioni.
    posto la routine perchè "leggera"
    1)funziona bene se il dato in d2 lo inserisco manualmente ma con il collegamento esterno in tempo reale non legge i cambiamenti
    2)non capisco perchè il "target.column = 4",anche se il riferimento alla cella d2 è esatto) il cursore lo legge come colonna 7
    3)è migliorabile questa routine? sono alle prime armi
    4+5+6)grazie, grazie, grazie
     
    Sub prova()
    'Private Sub Worksheet_Change(ByVal Target As Range)
      'If (Target.Row = 2) And (Target.Column = 4) Then 'evidenziando la colonna 4 col cursore la legge come colonna 7
    Dim nriga As Long
    Range("e1").Activate
       If Range("e2").Value <> "" Then
           Selection.End(xlDown).Activate
       End If
    nriga = ActiveCell.Row
       If Range("c2").Value <> (Range("F" & nriga).Value) Then
            Range("b2:d2").Select
            Selection.Copy
            Cells(nriga + 1, 5).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
             Application.CutCopyMode = False
             Range("G" & nriga + 1).Value = CLng(Range("G" & nriga + 1).Value) 'converte il valore copiato da stringa
            Range("h" & nriga + 1).Value = Range("f" & nriga + 1).Value * Range("g" & nriga + 1).Value
        Else
            Range("G" & nriga).Value = CLng(Range("G" & nriga).Value) + CLng(Range("D2").Value)
            Range("h" & nriga).Value = Range("f" & nriga).Value * Range("g" & nriga).Value
        End If
       'End If
    End Sub
    



  • di Locate (utente non iscritto) data: 22/04/2010

    Ciao
    prova a sostituire la tua funzione con questa perche nella tua non ai definito la cella di cambio
    vedi la variazione di partenza in questa
    ciao da locate
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim crc As Range ''variabile di memoria = cella riga colonna
    Dim nriga As Long
    Set crc = Intersect(Range("D2"), Target) ''setta la cella di cambio row2 col4
    If Not crc Is Nothing Then ''se fai cambio alla D2 esegue la macro sottostante
    Range("e1").Activate
       If Range("e2").Value <> "" Then
           Selection.End(xlDown).Activate
       End If
    nriga = ActiveCell.Row
       If Range("c2").Value <> (Range("F" & nriga).Value) Then
            Range("b2:d2").Select
            Selection.Copy
            Cells(nriga + 1, 5).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
             Application.CutCopyMode = False
             Range("G" & nriga + 1).Value = CLng(Range("G" & nriga + 1).Value) 'converte il valore copiato da stringa
            Range("h" & nriga + 1).Value = Range("f" & nriga + 1).Value * Range("g" & nriga + 1).Value
        Else
            Range("G" & nriga).Value = CLng(Range("G" & nriga).Value) + CLng(Range("D2").Value)
            Range("h" & nriga).Value = Range("f" & nriga).Value * Range("g" & nriga).Value
        End If
      End If
    End Sub



  • di Skario (utente non iscritto) data: 22/04/2010

    Ciao locate,
    grazie per l'intervento.
    no purtroppo funziona come la mia; non legge la variazione in d2 del collegamento esterno. dai aiutami!



  • di Locate (utente non iscritto) data: 22/04/2010

    Ciao skario
    una precisazione a questo evento in riferimento alla cella d2, i dati in questione li riceve da un altro foglio dello stesso file o a un collegamento a dati di un altro file nel tuo pc o da un pc da rete, perche' se i dati li riceve da un altro foglio bisogna, come spiegano a grandi linee in rete che bisogna fare due macro distinte per questo evento ossia mettere l'evento change nel foglio che si modifica e mettere la macro che calcola l'evento in un modulo con indirizzo al foglio del calcolo interessato. se il dato arriva da un altro file girando in rete dalle ore 21 non ho ancora trovato nulla comunque fai sapere la situazione intanto io con calma cerco ancora e vedo di porre la domanda nel possibile in un altro post sperando di imbattermi in qualche problema analogo risolto
    ciao da locate



  • di Skario (utente non iscritto) data: 23/04/2010

    Ciao locate,
    si i dati provengono da un collegamento esterno via web, nella cella "d2" leggo l'indirizzo di riferimento. grazie a presto. skario



  • di Locate (utente non iscritto) data: 23/04/2010

    Ciao skario
    letto il tuo post e come immaginavo i tuoi dati arrivano da rete e non da un unfoglio del tuo file quindi esiste un collegamento esterno all'evento, girando in rete non ho trovato niente da soddisfare il tuo problema e adattatare alla tua procedura.
    a questo punto prova a rivolgerti a roberto in questo forum il quale alla voce --blog-- excelvba, a fatto molti appunti utili e tra questi l'evento change, la imail la trovi in tutti gli articoli scritti da lui chiedi se esiste la possibilita' con l'evoluzione di excel 2007 di fare questo
    fai sapere per un futuro di altri con stesso problema se questi e possibile
    ciao da locate



  • di Skario (utente non iscritto) data: 23/04/2010

    Ciao locate,
    grazie per l'interesse, seguirò il tuo consiglio.
    alla prossima!