Newsgroup: it.comp.lang.visual-basic
Titolo: Evento change o sheetchange excel : Aiuto

Ciao a tutti ..vi spiego brevemente il mio problema. Devo interfacciare
Excel ad un programma di finanza. Molto semplicemente in una cella viene
fatta partire una query che ogni 30 secondi, in automatico, aggiorna il
valore di un titolo azionario. Qua subentra il mio problema.
Vorrei usare una routine ad evento che "si accorga" quando il valore della
cella cambia per fare determinate operazioni.
Ho usato l'evento change, ma senza risultati in quanto mi sembra di aver
capito che esso funzioni solo se la cella viene modificata dall'utente o da
una applicazione di vba. Il fatto è, che è un'applicazione esterna ad excel
che fa cambiare il valore della cella. Dovrei usare sheetchange?
Come potrebbe essere il codice principale?
UN IMMENSO GRAZIE A CHI MI RISPONDE
Ciao a tutti Diego.

 Come potrebbe essere il codice principale?
Sarebbe utile sapere come viene aggiornato il foglio di Excel: mediante un
collegamento del foglio ad una query? per mezzo del DDE? O altro? Ma, a
parte questo, non dovrebbero esserci problemi, credo, con "change".
Ti faccio un esempio veloce veloce: un db di Access che aggiorna un foglio
Excel e un programmino vb6 che intercetta le modifiche di tale foglio:
Access:
Tabella: tabella1
Campi: id (contatore), dataora, valore (lungo)
Query di accodamento:
PARAMETERS [NuovoValore] Long;
INSERT INTO Tabella1 ( valore )
VALUES ([NuovoValore]);
Maschera: maschera1 con IntervalloTimer=30000 e Routine evento "SuTimer":
Option Compare Database:Option Explicit
Private Sub Form_Timer()
  Dim tDataOra As Date
  Dim sDataOra As String
  Dim lValore  As Long
  With CurrentDb.QueryDefs!Query1
    .Parameters![NuovoValore] = Int((32000 * Rnd) + 1)
    .Execute DB_FAILONERROR
  End With
  tDataOra = DMax("[dataora]", "tabella1")
  sDataOra _
    = Format$(tDataOra, "mm/dd/yyyy") _
    & " " _
    & Format$(tDataOra, "hh.nn.ss")
  lValore _
    = DLookup( _
          "[valore]" _
        , "tabella1" _
        , "[dataora]=#" & sDataOra & "#")
  With GetObject(, "Excel.Application")
    With .ActiveWorkbook.Worksheets(1)
      .Cells(1, 1).Value = tDataOra
      .Cells(1, 2).Value = lValore
    End With
  End With
End Sub
vb6: Form1 e Text1
Option Explicit
Private m_oXlApp                As Excel.Application
Private WithEvents m_oWorksheet As Excel.Worksheet
Private m_oRange                As Excel.Range
Private Sub Form_Load()
  Set m_oXlApp = GetObject(, "Excel.Application")
  Set m_oWorksheet = m_oXlApp.ActiveWorkbook.Worksheets(1)
  Set m_oRange = m_oWorksheet.Cells(1, 2)
End Sub
Private Sub Form_Unload( _
  ByRef Cancel As Integer)
  Set m_oRange = Nothing
  Set m_oWorksheet = Nothing
  Set m_oXlApp = Nothing
End Sub
Private Sub m_oWorksheet_Change( _
  ByVal Target As Excel.Range)
  With Target
    If .Address = m_oRange.Address Then
      Beep
      Me.Text1.Text = .Address & " = " & .Value
    End If
  End With
End Sub
Quando Maschera1 di db1.mdb modifica le celle A1 e B1 della cartella
corrente di Excel il programma vb6 fa bip e mostra in Text1 il valore di B1.
Spero possa esserti utile.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 gentilezza dimostrata.
Ricambio.


 grazie mille ..provo a vedere se dalle tue preziose indicazioni riesco a
realizzare un qualche cosa che funzioni..
Ciao Diego.