vba evento calculate



  • vba evento calculate
    di skaro (utente non iscritto) data: 21/08/2014 20:31:07

    Ciao a tutti, ho un problema che non riesco a risolvere: ricevo dati in dde e con una rutine attraverso l'evento calculate riesco a sviluppare l'elaborazione dei dati scaricati. Questo funziona su un solo foglio di lavoro mentre ho la necessità che l'elaborazione avvenga contemporaneamente su tutti i fogli già predisposti con la stessa rutine. Domanda: si può duplicare su più fogli della stessa cartella la stessa rutine con l'vento calculate ? se si AIUTO. grazie infinite a chi può rispondere
     
    Sub WorkSheet_Calculate()
    Dim i As Integer
    i = [b1]
    Static ValoreDaControllare_b3
       With Range("b3")    '<----- cella da controllare
       If Range("b3") = Cells(i, 2) Then
      Range(Cells(i, 3), Cells(i, 4)) = Range("c3:d3").Value
      Application.EnableEvents = False
      Cells(i, 5).FormulaArray = "=+ROUND(SUM(R4C[-2]:INDIRECT(""c""&R1C2)*R4C[-1]:INDIRECT(""d""&R1C2))/SUM(R4C[-1]:INDIRECT(""d""&R1C2)),3)"
      Cells(i, 5).Value = Cells(i, 5)
      'Application.EnableEvents = True 
     ValoreDaControllare_b3 = .Value
    End If
    End With
    End Sub
    



  • di lepat (utente non iscritto) data: 22/08/2014 07:47:02

    devi usare l'evento della cartella di lavoro
    Private Sub Workbook_SheetCalculate(ByVal Sh As Object)


  • skaro
    di skaro data: 22/08/2014 12:27:53

    ciao lepat grazie per la risposta. ho inserito la rutine nella cartella come hai detto eliminato quelle nei fogli ma subito dopo l'avvio va in errore di run time 1004 "errore definito dall'applicazione o dall'oggetto" e cliccando sul debag il cursore è sulla riga dell' IF con il valore della i = a zero. penso si debba aggiungere il riferimento ai vari fogli. mi dai una mano? grazie ancora



  • di lepat (utente non iscritto) data: 22/08/2014 13:29:16

    prova così, se non funziona allega il file
     
    Sub Workbook_SheetCalculate(ByVal Sh As Object) 
    Dim i As Integer
    Static ValoreDaControllare_b3
    with sh
       i = .range("b1")
       If .Range("b3") = .Cells(i, 2) Then
         .Range(.Cells(i, 3), .Cells(i, 4)) = .Range("c3:d3").Value
         Application.EnableEvents = False
         .Cells(i, 5).FormulaArray = "=+ROUND(SUM(R4C[-2]:INDIRECT(""c""&R1C2)*R4C[-1]:INDIRECT(""d""&R1C2))/SUM(R4C[-1]:INDIRECT(""d""&R1C2)),3)"
        .Cells(i, 5).Value = .Cells(i, 5)
         'Application.EnableEvents = True 
         ValoreDaControllare_b3 = .Value
      End If
    End With
    End Sub



  • di skaro (utente non iscritto) data: 25/08/2014 19:35:27

    ciao lepat scusa il ritardo nella risposta.
    no così non funziona il problema del test è che la cella in dde si aggiorna esclusivamente in tempo reale e per questo l'evento calculate non parte.
    grazie lo stesso